Aggiungi nuovi elementi a un array in Java

Hassan Saeed 12 ottobre 2023
  1. Usa un ArrayList
  2. Crea un nuovo array più grande
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.

Articolo correlato - Java Array