Tilføj nye elementer til et array i Java
Denne vejledning diskuterer, hvordan man tilføjer nye elementer til et array i Java.
Array
i Java er et containerobjekt, som indeholder et fast antal elementer af samme datatype. Længden af arrayet defineres, mens arrayobjektet erklæres, og kan ikke ændres senere.
Antag, at vi har et array med længde 5 i Java instansieret med nogle værdier:
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
Nu er der et krav om at tilføje et 6. element til vores array. Lad os prøve at tilføje dette 6. element til vores array.
arr[5] = "6";
Ovenstående kodelinje giver følgende fejl:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
Dette skyldes, at vi oprindeligt erklærede arrayet for at være af størrelse 5, og vi forsøgte at tilføje et sjette element til det.
Bare rolig, der er 2 mulige løsninger til at få dette gjort. Vi kan bruge en ArrayList
i stedet for et array, eller opret et nyt større array for at rumme nye elementer.
Brug en ArrayList
En bedre og anbefalet løsning er at bruge en ArrayList
i stedet for et array, da det kan ændres størrelse. Der er ingen fast størrelse på ArrayList
Derfor, når der er behov for at tilføje et nyt element, kan du blot tilføje ved at udføre testList.add(element)
.
import java.util.*;
public class Main {
public static void main(String args[]) {
List<String> testList = new ArrayList<String>();
testList.add("1");
testList.add("2");
testList.add("3");
testList.add("4");
testList.add("5");
//Print the original list
System.out.println("Initial ArrayList:\n"
+ testList);
//Add elements without running into any error
testList.add("6");
testList.add("7");
//Print the list after adding elements
System.out.println("Modified ArrayList:\n"
+ testList);
}
}
Ovenstående kode udsender følgende.
Initial ArrayList:
[1, 2, 3, 4, 5]
Modified ArrayList:
[1, 2, 3, 4, 5, 6, 7]
Eller hvis vi allerede har et array, kan vi også oprette en ArrayList
direkte.
import java.util.*;
public class Main {
public static void main(String args[]) {
//Create an array
String[] arr = new String[1];
arr[0] = "1";
//Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
//Print the original list
System.out.println("Initial ArrayList:\n"
+ testList);
//Add elements to it
testList.add("2");
testList.add("3");
//Print the list after adding elements
System.out.println("Modified ArrayList:\n"
+ testList);
}
}
Ovenstående kode udsender følgende.
Initial ArrayList:
[1]
Modified ArrayList:
[1, 2, 3]
Vi kan nemt konvertere en ArrayList
tilbage til et array.
import java.util.*;
public class Main {
public static void main(String args[]) {
//Create an array
String[] arr = new String[1];
arr[0] = "1";
//Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
//Add elements to it
testList.add("2");
testList.add("3");
//Convert the arraylist back to an array
arr = new String[ testList.size() ];
testList.toArray(arr);
}
}
Opret et nyt større array
Hvis vi insisterer på kun at arbejde med arrays, kan vi bruge java.util.Arrays.copyOf
metode til at skabe et større array og rumme et nyt element. Lad os bruge arrayet arr
vi oprettede ovenfor og tilføjer et nyt element til det i eksemplet nedenfor.
import java.util.*;
public class Main {
public static void main(String args[]) {
//Create an array
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
// print the original array
System.out.println("Initial Array:\n"
+ Arrays.toString(arr));
//Steps to add a new element
//Get the current length of the array
int N = arr.length;
//Create a new array of length N+1 and copy all the previous elements to this new array
arr = Arrays.copyOf(arr, N + 1);
//Add a new element to the array
arr[N] = "6";
// print the updated array
System.out.println("Modified Array:\n"
+ Arrays.toString(arr));
}
}
Ovenstående kode udsender følgende.
Initial Array:
[1, 2, 3, 4, 5]
Modified Array:
[1, 2, 3, 4, 5, 6]
Hvis vi senere føler behov for at tilføje et andet element til arr
, bliver vi nødt til at gentage ovenstående kodeblok igen!
Derfor anbefales denne løsning ikke, fordi tilføjelsen af hvert nyt element har en tidskompleksitet på O(n)
da den skal kopiere alle elementer fra det forrige array til et nyt array. På den anden side tilføjelse af hvert nyt element ved hjælp af ArrayList
har O(1)
amortiseret kostpris pr. operation.