Collections Framework: List e Set
๐ฏ Obiettivi
- Capire il Collections Framework
- Usare List (ArrayList, LinkedList)
- Usare Set (HashSet, TreeSet)
- Differenze tra List e Set
- Operazioni comuni sulle collezioni
๐ก Collections Framework
Il Collections Framework รจ un insieme di interfacce e classi per gestire gruppi di oggetti.
Gerarchia principale:
- List: collezione ordinata (duplicati permessi)
- Set: collezione senza duplicati
- Map: coppie chiave-valore (prossima lezione)
๐ ArrayList (giร vista)
import java.util.ArrayList;
ArrayList lista = new ArrayList<>();
lista.add("Mario");
lista.add("Giulia");
lista.add("Mario"); // Duplicati OK!
System.out.println(lista); // [Mario, Giulia, Mario]
๐ LinkedList
import java.util.LinkedList;
LinkedList numeri = new LinkedList<>();
numeri.add(10);
numeri.add(20);
numeri.addFirst(5); // Aggiunge all'inizio
numeri.addLast(30); // Aggiunge alla fine
numeri.removeFirst(); // Rimuove primo
System.out.println(numeri); // [10, 20, 30]
ArrayList vs LinkedList
| Operazione | ArrayList | LinkedList |
|---|---|---|
| Accesso indice | โ Veloce | โ Lento |
| Inserimento fine | โ Veloce | โ Veloce |
| Inserimento inizio | โ Lento | โ Veloce |
๐น HashSet - No Duplicati
import java.util.HashSet;
HashSet nomi = new HashSet<>();
nomi.add("Mario");
nomi.add("Giulia");
nomi.add("Mario"); // Ignorato! Duplicato
System.out.println(nomi); // [Mario, Giulia]
System.out.println("Dimensione: " + nomi.size()); // 2
// Verifica presenza
if (nomi.contains("Mario")) {
System.out.println("Mario รจ presente");
}
๐ณ TreeSet - Ordinato
import java.util.TreeSet;
TreeSet numeri = new TreeSet<>();
numeri.add(50);
numeri.add(10);
numeri.add(30);
numeri.add(10); // Ignorato
System.out.println(numeri); // [10, 30, 50] - Ordinato!
// Metodi utili
System.out.println("Primo: " + numeri.first());
System.out.println("Ultimo: " + numeri.last());
๐ Operazioni sulle Collezioni
import java.util.*;
public class OperazioniCollezioni {
public static void main(String[] args) {
ArrayList lista = new ArrayList<>();
lista.add("Mela");
lista.add("Banana");
lista.add("Arancia");
lista.add("Kiwi");
// Ordinare
Collections.sort(lista);
System.out.println("Ordinata: " + lista);
// Mescolare
Collections.shuffle(lista);
System.out.println("Mescolata: " + lista);
// Invertire
Collections.reverse(lista);
System.out.println("Invertita: " + lista);
// Cercare
int pos = Collections.binarySearch(lista, "Mela");
System.out.println("Posizione Mela: " + pos);
}
}
๐ Esempio Completo: Studenti Unici
import java.util.*;
class Studente {
private String nome;
private String matricola;
public Studente(String nome, String matricola) {
this.nome = nome;
this.matricola = matricola;
}
public String getNome() { return nome; }
public String getMatricola() { return matricola; }
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Studente)) return false;
Studente altro = (Studente) obj;
return matricola.equals(altro.matricola);
}
@Override
public int hashCode() {
return matricola.hashCode();
}
@Override
public String toString() {
return nome + " (" + matricola + ")";
}
}
public class GestioneStudenti {
public static void main(String[] args) {
// Set per evitare duplicati
HashSet studenti = new HashSet<>();
studenti.add(new Studente("Mario", "12345"));
studenti.add(new Studente("Giulia", "67890"));
studenti.add(new Studente("Mario", "12345")); // Duplicato!
System.out.println("Numero studenti: " + studenti.size());
for (Studente s : studenti) {
System.out.println(s);
}
}
}
โ๏ธ Esercizi
Esercizio 1: Rimuovi Duplicati
FACILEData una ArrayList con duplicati, usa Set per rimuoverli
Esercizio 2: Classifica
MEDIOUsa TreeSet per mantenere punteggi ordinati
Esercizio 3: Parole Uniche
MEDIOLeggi file, trova parole uniche con HashSet
๐ฏ Concetti Chiave
- List: ordinata, duplicati OK
- Set: no duplicati, no ordine (HashSet)
- TreeSet: ordinato automaticamente
- ArrayList per accesso veloce
- LinkedList per inserimenti inizio/fine
- HashSet per eliminare duplicati