Dimensione iniziale per ArrayList

È ansible impostare la dimensione iniziale per un ArrayList facendo

ArrayList arr=new ArrayList(10); 

Tuttavia, non puoi farlo

 arr.add(5, 10); 

perché causa un’eccezione fuori dai limiti.

A cosa serve impostare una dimensione iniziale se non puoi accedere allo spazio che hai assegnato?

La funzione add è definita come add(int index, Object element) quindi non sto aggiungendo all’indice 10.

Stai confondendo la dimensione della lista di array con la sua capacità:

  • la dimensione è il numero di elementi nella lista;
  • la capacità è quanti elementi la lista può potenzialmente ospitare senza riallocare le sue strutture interne.

Quando si chiama new ArrayList(10) , si imposta la capacità iniziale della lista, non la sua dimensione. In altre parole, quando viene costruito in questo modo, l’elenco di array inizia la sua vita vuota.

Un modo per aggiungere dieci elementi all’elenco di array è utilizzando un ciclo:

 for (int i = 0; i < 10; i++) { arr.add(0); } 

Fatto ciò, ora puoi modificare gli elementi agli indici 0..9.

Se vuoi una lista con una dimensione predefinita puoi anche usare:

 List arr = Arrays.asList(new Integer[10]); 

se si desidera utilizzare Collections.fill (elenco, obj); per riempire la lista con un object ripetuto in alternativa puoi usare

 ArrayList arr=new ArrayList(Collections.nCopies(10, 0)); 

la linea copia 10 volte 0 in ArrayList

La capacità di un ArrayList non è uguale alla sua dimensione . La dimensione è uguale al numero di elementi contenuti in ArrayList (e qualsiasi altra implementazione List ).

La capacità è solo la lunghezza dell’array sottostante che viene utilizzato per memorizzare in modo interno gli elementi di ArrayList ed è sempre maggiore o uguale alla dimensione dell’elenco.

Quando si chiama set(index, element) sulla lista, l’ index riferisce al numero effettivo degli elementi della lista (= size) (che è zero nel codice, quindi viene generato AIOOBE ), non alla lunghezza dell’array (= capacità ) (che è un dettaglio di implementazione specifico per ArrayList ).

Il metodo set è comune a tutte le implementazioni di List , come LinkedList , che non è effettivamente implementato da un array, ma come una catena di voci collegate.

Modifica : si utilizza effettivamente il metodo add(index, element) , non set(index, element) , ma il principio è lo stesso qui.

Se si desidera aggiungere gli elementi con l’indice, è ansible utilizzare una matrice.

  String [] test = new String[length]; test[0] = "add"; 

10 è la capacità iniziale di AL, non la dimensione (che è 0). Dovresti menzionare la capacità iniziale di un valore elevato quando hai molti elementi, perché evita il sovraccarico di espandere la capacità man mano che continui ad aggiungere elementi.

Immagino che una risposta esatta alla tua domanda sarebbe:

L’impostazione di una dimensione iniziale su un ArrayList riduce il nr. di volte deve avvenire la riassegnazione della memoria interna. L’elenco è supportato da un array. Se si specifica, ad esempio, la capacità iniziale 0, già al primo inserimento di un elemento, l’array interno dovrebbe essere ridimensionato. Se hai un’idea approssimativa di quanti elementi il ​​tuo elenco potrebbe contenere, l’impostazione della capacità iniziale ridurrebbe il nr. di riassegnazioni di memoria che si verificano mentre si utilizza l’elenco.

Al momento non ci sono elementi nella tua lista, quindi non puoi aggiungere all’indice 5 della lista quando non esiste. Stai confondendo la capacità della lista con le sue dimensioni attuali.

Chiama soltanto:

 arr.add(10) 

per aggiungere il numero intero al tuo ArrayList

Anche se il tuo arraylist ha una capacità di 10, la vera lista non ha elementi qui. Il metodo add viene utilizzato per inserire un elemento nella lista reale. Poiché non ha elementi, non puoi inserire un elemento nell’indice di 5.

Se vuoi aggiungere 10 oggetti al tuo ArrayList puoi provare che:

 for (int i = 0; i < 10; i++) arr.add(i); 

Se hai già dichiarato una variabile di dimensione dell'array, useresti la dimensione variabile invece del numero '10'

Questo potrebbe aiutare qualcuno –

 ArrayList integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10])); 

ArrayList myList = new ArrayList (10);

 // myList.add(3, "DDD"); // myList.add(9, "III"); myList.add(0, "AAA"); myList.add(1, "BBB"); for(String item:myList){ System.out.println("inside list : "+item); } 

/ * Dichiara che la capasità iniziale dell’arrayylist non è altro che il risparmio del tempo di spostamento all’interno; quando aggiungiamo l’elemento internamente controlliamo la capa- cità per aumentare la capa- cità, potremmo aggiungere l’elemento a 0 indice inizialmente di 1 e così via. * /