Aggiungi nuovi elementi a un array in Java
Questo tutorial discute come aggiungere nuovi elementi a un array in Java.
Array
in Java è un oggetto contenitore che contiene un numero fisso di elementi dello stesso tipo di dati. La lunghezza dell’array viene definita durante la dichiarazione dell’oggetto array e non può essere modificata in seguito.
Supponiamo di avere un array di lunghezza 5 in Java istanziato con alcuni valori:
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
Ora è necessario aggiungere un sesto elemento al nostro array. Proviamo ad aggiungere questo sesto elemento al nostro array.
arr[5] = "6";
La riga di codice precedente restituisce il seguente errore:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
Questo perché inizialmente abbiamo dichiarato l’array di dimensione 5 e abbiamo provato ad aggiungervi un sesto elemento.
Non preoccuparti, ci sono 2 possibili soluzioni per farlo. Possiamo usare un ArrayList
invece di un array o creare un nuovo array più grande per accogliere nuovi elementi.
Usa un ArrayList
Una soluzione migliore e consigliata è usare un ArrayList
invece di un array poiché è ridimensionabile. Non esiste una dimensione fissa di ArrayList
quindi ogni volta che è necessario aggiungere un nuovo elemento puoi semplicemente aggiungerlo eseguendo 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);
}
}
Il codice precedente restituisce quanto segue.
Initial ArrayList : [ 1, 2, 3, 4, 5 ] Modified ArrayList : [ 1, 2, 3, 4, 5, 6, 7 ]
Oppure, se abbiamo già un array, possiamo anche creare direttamente un ArrayList
.
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);
}
}
Il codice precedente restituisce quanto segue.
Initial ArrayList : [ 1 ] Modified ArrayList : [ 1, 2, 3 ]
Possiamo facilmente riconvertire un ArrayList
in un 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);
}
}
Crea un nuovo array più grande
Se insistiamo nel lavorare solo con gli array, possiamo usare il metodo java.util.Arrays.copyOf
per creare un array più grande e accogliere un nuovo elemento. Usiamo l’array arr
che abbiamo creato sopra e aggiungiamo un nuovo elemento nell’esempio sotto.
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));
}
}
Il codice precedente restituisce quanto segue.
Initial Array : [ 1, 2, 3, 4, 5 ] Modified Array : [ 1, 2, 3, 4, 5, 6 ]
Se in seguito sentiremo la necessità di aggiungere un altro elemento a arr
, dovremo ripetere di nuovo il blocco di codice sopra!
Pertanto questa soluzione è sconsigliata perché l’aggiunta di ogni nuovo elemento ha una complessità temporale di O(n)
poiché deve copiare tutti gli elementi dall’array precedente a un nuovo array. D’altra parte, l’aggiunta di ogni nuovo elemento utilizzando ArrayList
ha un costo ammortizzato O(1)
per operazione.