โ˜• Lezione 13

Collezioni: List e Set

Collections Framework: List e Set

๐ŸŽฏ Obiettivi

๐Ÿ’ก 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

FACILE

Data una ArrayList con duplicati, usa Set per rimuoverli

Esercizio 2: Classifica

MEDIO

Usa TreeSet per mantenere punteggi ordinati

Esercizio 3: Parole Uniche

MEDIO

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