Vai al contenuto
eLearner.app
Modulo 4 · Lezione 2 di 28/14 nel corso~15 min
Lezioni del modulo (2/2)

Collezioni e ArrayList

Gli array tradizionali in Java hanno una dimensione fissa definita al momento della creazione. Per lavorare con liste di dati la cui dimensione può variare dinamicamente, Java fornisce il Framework delle Collezioni (Java Collections Framework). La classe più utilizzata è ArrayList.

La Classe ArrayList e i Generics

ArrayList implementa un array ridimensionabile in memoria. Per dichiarare un ArrayList, dobbiamo specificare il tipo di elementi che conterrà racchiudendolo tra parentesi angolari < >. Questa funzionalità è chiamata Generics.

Per utilizzare ArrayList, dobbiamo importarla all'inizio del file da java.util.ArrayList.

Dichiarazione e istanziazione:

Code
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Metodi Principali

Ecco le operazioni fondamentali su un ArrayList:

  1. add(elemento): Aggiunge un elemento alla fine della lista.
  2. get(indice): Restituisce l'elemento all'indice specificato (0-indexed).
  3. size(): Restituisce il numero di elementi attualmente presenti nella lista.
  4. remove(indice): Rimuove l'elemento all'indice indicato.
Code
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Stampa 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Stampa "Pane"

Scorrere una Lista (For-Each)

Il ciclo for-each è la struttura ideale per scorrere tutti gli elementi di una collezione:

Code
for (String item : shoppingList) {
    System.out.println(item);
}

Array vs ArrayList: Memoria e Prestazioni

Sebbene ArrayList sia molto più flessibile di un array statico, comporta dei costi a livello di prestazioni e memoria:

  • Array Statico: È allocato in un blocco di memoria contiguo, ha dimensioni fisse e l'accesso agli elementi tramite indice è estremamente veloce. Memorizza direttamente tipi primitivi senza overhead.
  • ArrayList: Internamente gestisce un array che viene ridimensionato (creando un nuovo array più grande e copiando gli elementi vecchi) quando si supera la sua capacità iniziale (generalmente 10). Inoltre, contiene solo riferimenti ad oggetti, introducendo un overhead di memoria per ciascun elemento.

Autoboxing e Unboxing

Dato che ArrayList può ospitare solo oggetti, Java effettua automaticamente la conversione tra tipi primitivi e le loro rispettive classi wrapper:

  • Autoboxing: Conversione automatica da tipo primitivo a classe wrapper. Ad esempio, quando fai numbers.add(42), Java converte automaticamente 42 (int) in Integer.valueOf(42) (Integer).
  • Unboxing: Conversione automatica da classe wrapper a tipo primitivo. Ad esempio, quando esegui int num = numbers.get(0), Java effettua internamente la conversione da Integer a int.

Prova tu

Esercizio#java.m4.l2.e1
Tentativi: 0Caricamento…

Importa ArrayList, dichiara un ArrayList di String chiamato names. Aggiungi alla lista Alice e Bob, poi stampane la dimensione usando il metodo size().

Caricamento editor…
Mostra suggerimento

Includi `import java.util.ArrayList;` in cima. Crea la lista con `ArrayList<String> names = new ArrayList<>();`, aggiungi gli elementi e stampane la dimensione con `names.size()`.

Soluzione disponibile dopo 3 tentativi

Esercizio#java.m4.l2.e2
Tentativi: 0Caricamento…

Dichiara un ArrayList di Integer chiamato numbers, inserisci il numero 42 e stampalo recuperandolo tramite l'indice 0 con get().

Caricamento editor…
Mostra suggerimento

Usa `ArrayList<Integer> numbers = new ArrayList<>();` (con la classe wrapper Integer) e stampalo con `System.out.println(numbers.get(0));`.

Soluzione disponibile dopo 3 tentativi

Esercizio#java.m4.l2.e3
Tentativi: 0Caricamento…

Dichiara un ArrayList di String chiamato colors. Aggiungi i colori Red, Green e Blue alla lista. Infine, usa un ciclo for-each per scorrere la lista e stampare ciascun colore a schermo.

Caricamento editor…
Mostra suggerimento

Dichiara la lista con `ArrayList<String> colors = new ArrayList<>();`, aggiungi i tre colori e usa un ciclo `for (String c : colors)` per stamparli con `System.out.println(c);`.

Soluzione disponibile dopo 3 tentativi