CodeGym /Corsi /All lectures for IT purposes /Lavorare con ArrayList

Lavorare con ArrayList

All lectures for IT purposes
Livello 1, Lezione 525
Disponibile

1. Come ArrayListè strutturato

ArrayListè la classe Java utilizzata più comunemente per la memorizzazione di elementi. Allora come ArrayListfunziona e perché piace così tanto a tutti?

La struttura di ArrayListè semplice e geniale. Ogni ArrayListoggetto contiene due campi:

  • Una matrice di elementi
  • Una sizevariabile, che memorizza il numero di elementi nell'elenco

Internamente, un ArrayListoggetto contiene un array molto comune! Ma non è tutto. C'è anche una variabile size , che memorizza la lunghezza dell'elenco. Ecco come funziona:

Inizialmente, la lunghezza dell'array all'interno dell'elenco è 10. E la sizevariabile è 0.

Se aggiungi un elemento all'elenco, verrà memorizzato nella cella 0 dell'array e sizeaumenterà a 1.

Se aggiungi un altro elemento, verrà memorizzato nella prima cella e sizeaumenterà nuovamente di 1 e diventerà uguale a due.

Se aggiungi un altro elemento quando non c'è più spazio nell'array, nel add()metodo accade quanto segue:

  1. Viene creato un nuovo array che è una volta e mezza la lunghezza del precedente
  2. Tutti gli elementi del vecchio array vengono copiati nel nuovo array.
  3. Nell'oggetto ArrayList, un riferimento al nuovo array sostituisce il riferimento a quello vecchio .
  4. L'elemento passato viene salvato nella decima cella del nuovo array.
  5. La variabile dimensione aumenta di 1 e sarà ora uguale a 11

Qualcosa di simile accade quando si aggiunge (inserisce) un elemento al centro dell'elenco. Gli elementi esistenti vengono spostati di 1 a destra e l'elemento passato viene scritto nella cella appena liberata dell'array.

Ora considereremo gli scenari più basilari che coinvolgono gli elenchi:


2. Aggiunta di un elemento a un fileArrayList

Diamo un'occhiata a cosa succede all'interno dell'elenco quando gli elementi vengono aggiunti ad esso. Immediatamente dopo la creazione di un oggetto ArrayList, abbiamo qualcosa di simile in memoria:

Aggiunta di un elemento a un ArrayList

Abbiamo un ArrayListoggetto che contiene due campi (due variabili): un contenitore (l' dataarray) e il numero di elementi memorizzati ( size). La datavariabile memorizza un riferimento a un contenitore (array) che può memorizzare 10 elementi.

Se decidiamo di aggiungere il numero 5 all'array, otteniamo la seguente immagine:

Aggiunta di un elemento a un ArrayList 2

L'array ora memorizza l'elemento 5 e size == 1.

Se qualcuno chiama ora il size()metodo sul nostro ArrayListoggetto, il valore restituito sarà il numero di elementi memorizzati nell'elenco: 1. Il numero di elementi nell'elenco non è uguale alla capacità di archiviazione dell'array.

Né l'attuale capacità di archiviazione né l'array stesso saranno mai accessibili (visibili) all'esterno dell'oggetto ArrayList. Questi sono e saranno sempre i ArrayListdati interni di .

Aggiungiamo altri 7 numeri all'elenco: 10, 20, 30, 40, 50, 60, 70.

Ora la memoria sarà simile a questa:

Aggiunta di un elemento a un ArrayList

Se chiami il size()metodo ora, restituirà il numero 8, che è il nuovo numero di elementi nell'elenco. Questo valore non ha nulla a che fare con la dimensione dell'array interno.

Importante:

C'è una semplificazione eccessiva in questa immagine.

La ArrayListclasse non può memorizzare tipi primitivi, quindi utilizza il Integertipo anziché int. Il contenitore non memorizza direttamente i valori {5, 10, 20, 30, 40, 50, 60, 70}, ma piuttosto i riferimenti agli Integeroggetti. Tutte le celle vuote nell'archivio container null.



3. Aumentare la lunghezza di un elenco

Diamo un'occhiata a cosa succede all'interno di una lista quando non ci sono più celle vuote nel suo array interno.

Supponiamo di avere una lista di 10 elementi:

Aumentare la lunghezza di un elenco

Decidiamo di aggiungervi il numero 100 . Questo è ciò che accade nel add()metodo:

Passaggio 1: crea un nuovo array:

Aumentare la lunghezza di una lista 2

Passaggio 2: copia tutti gli elementi dal vecchio array a quello nuovo:

Aumentare la lunghezza di una lista 2

Passaggio 3 — Sostituisci il vecchio array (cambia il riferimento all'array ArrayListinterno dell'oggetto):

Aumentare la lunghezza di una lista 3

Passaggio 4: aggiungi il nuovo numero, che è ciò per cui abbiamo lavorato così duramente:

Aumentare la lunghezza di una lista 4

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION