In questa lezione impari a
- 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
⭐ Facile
Esercizio 1 – rimuovi duplicati.
Data una ArrayList con duplicati, usa Set per rimuoverli
⭐⭐ Medio
Esercizio 2 – classifica.
Usa TreeSet per mantenere punteggi ordinati
⭐⭐ Medio
Esercizio 3 – parole uniche.
Leggi 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