"Eccomi qui."

"Ciao, Eli!"

"Oggi parleremo di un argomento interessante. Ti parlerò della classe ArrayList ."

"Una nuova classe? Fantastico! Cosa può fare?"

"Vorrei iniziare con il retroscena. L'unica cosa che i programmatori non amano degli array è che non è possibile modificarne le dimensioni. Cosa fare se è necessario aggiungere altri tre elementi a un array che ha solo uno slot libero? "

"L'unica soluzione a questo problema è creare array molto grandi, in modo da garantire spazio sufficiente per tutti gli elementi. Tuttavia, questo spesso significa memoria sprecata. Se un array di solito contiene tre elementi, ma c'è anche la minima possibilità che potrebbe essere necessario contenere 100 elementi, è necessario creare un array di 100 elementi."

"Allora, cosa hanno escogitato i programmatori?"

"Hanno scritto la classe ArrayList , che fa la stessa cosa di un Array, ma può cambiarne le dimensioni."

"Mossa interessante. Come hanno fatto?"

"Ogni oggetto ArrayList memorizza un array regolare di elementi. Quando leggi elementi da un ArrayList , li legge dal suo array interno. Quando li scrivi su ArrayList , li scrive nel suo array interno. Qui, confronta queste colonne:"

Vettore Lista di array
Crea un contenitore per gli elementi
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Ottieni il numero di elementi
int n = list.length;
int n = list.size();
Ottieni un elemento da un array/raccolta
String s = list[3];
String s = list.get(3);
Scrivi un elemento in un array
list[3] = s;
list.set(3, s);

"Allora, perché ArrayList è migliore? Per quanto ne so, il codice ora è più lungo."

"In primo luogo, ArrayList supporta diverse operazioni aggiuntive che i programmatori devono eseguire continuamente. Un normale array non supporta queste operazioni. Ad esempio, l'inserimento o l'eliminazione di elementi dal centro di un array senza lasciare buchi. "

"In secondo luogo, la possibilità di modificare la dimensione dell'array. Quando è necessario aggiungere un altro elemento ma l'array interno non ha slot liberi, ecco cosa succede all'interno di ArrayList :

a) Viene creato un altro array più grande del 50% rispetto all'attuale array interno, più un elemento.

b) Tutti gli elementi del vecchio array vengono copiati in quello nuovo.

c) Il nuovo array viene salvato come array interno dell'oggetto ArrayList. Il vecchio array è dichiarato spazzatura (semplicemente smettiamo di memorizzare un riferimento ad esso)."

Vettore Lista di array
Aggiungi un elemento alla fine dell'array
Questa azione non è supportata
list.add(s);
Aggiungi un elemento al centro dell'array
Questa azione non è supportata
list.add(15, s);
Aggiungi un elemento all'inizio dell'array
Questa azione non è supportata
list.add(0, s);
Elimina un elemento dall'array
Potremmo eliminare un elemento con list[3] = null. Ma questo lascerebbe un "buco" nell'array.
list.remove(3);

"Come lavoriamo con questo ArrayList?"

"In realtà, proprio come facciamo con un normale array. Guarda. Confrontiamo il lavoro con un ArrayList con il lavoro con un array. Supponiamo di dover 'leggere 10 stringhe e visualizzarle sullo schermo in ordine inverso '."

"Guarda questo:

Con una matrice
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Con un ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

Ho usato lo stesso colore per evidenziare azioni simili in ogni colonna."

"Da un lato, tutto è diverso. Dall'altro, è sempre lo stesso."

"Giusto. Solo che non usiamo parentesi quadre quando lavoriamo con un ArrayList . Invece, usiamo i metodi get , set e add ."

"Sì, ho capito così tanto. Tuttavia, sembra proprio lo stesso."