Map: Dizionari Chiave-Valore
π― Obiettivi
- Capire cosa sono le Map
- Usare HashMap
- Usare TreeMap
- Iterare su Map
- Esempi pratici
π‘ Cos'Γ¨ una Map?
Una Map memorizza coppie chiave-valore.
Ogni chiave Γ¨ unica e associata a un valore.
Esempio: Rubrica telefonica (nome β telefono)
π HashMap Base
import java.util.HashMap;
public class EsempioHashMap {
public static void main(String[] args) {
// Chiave = String, Valore = Integer
HashMap eta = new HashMap<>();
// Aggiungere coppie
eta.put("Mario", 25);
eta.put("Giulia", 30);
eta.put("Luca", 22);
// Ottenere valore
int etaMario = eta.get("Mario");
System.out.println("EtΓ di Mario: " + etaMario);
// Verificare presenza chiave
if (eta.containsKey("Giulia")) {
System.out.println("Giulia presente!");
}
// Verificare presenza valore
if (eta.containsValue(22)) {
System.out.println("C'Γ¨ qualcuno con 22 anni");
}
// Dimensione
System.out.println("Persone: " + eta.size());
// Rimuovere
eta.remove("Luca");
}
}
π Iterare su HashMap
import java.util.HashMap;
HashMap voti = new HashMap<>();
voti.put("Mario", 8);
voti.put("Giulia", 9);
voti.put("Luca", 7);
// Metodo 1: Iterare sulle chiavi
System.out.println("=== Solo Chiavi ===");
for (String nome : voti.keySet()) {
System.out.println(nome);
}
// Metodo 2: Iterare sui valori
System.out.println("\n=== Solo Valori ===");
for (Integer voto : voti.values()) {
System.out.println(voto);
}
// Metodo 3: Iterare su coppie (CONSIGLIATO)
System.out.println("\n=== Coppie ===");
for (String nome : voti.keySet()) {
int voto = voti.get(nome);
System.out.println(nome + ": " + voto);
}
// Metodo 4: Con Entry
System.out.println("\n=== Con Entry ===");
for (var entry : voti.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
π³ TreeMap - Ordinato
import java.util.TreeMap;
TreeMap classifica = new TreeMap<>();
classifica.put("Luca", 85);
classifica.put("Mario", 92);
classifica.put("Giulia", 88);
// TreeMap ordina automaticamente per chiave!
for (String nome : classifica.keySet()) {
System.out.println(nome + ": " + classifica.get(nome));
}
// Output ordinato: Giulia, Luca, Mario
π Esempio: Dizionario
import java.util.HashMap;
import java.util.Scanner;
public class Dizionario {
public static void main(String[] args) {
HashMap dizionario = new HashMap<>();
// Aggiungo parole
dizionario.put("hello", "ciao");
dizionario.put("world", "mondo");
dizionario.put("computer", "calcolatore");
dizionario.put("java", "caffè (e linguaggio!)");
dizionario.put("book", "libro");
Scanner input = new Scanner(System.in);
System.out.println("=== Dizionario Inglese-Italiano ===");
System.out.println("Parole disponibili: " + dizionario.keySet());
while (true) {
System.out.print("\nParola da tradurre (o 'esci'): ");
String parola = input.nextLine().toLowerCase();
if (parola.equals("esci")) {
break;
}
if (dizionario.containsKey(parola)) {
System.out.println("Traduzione: " + dizionario.get(parola));
} else {
System.out.println("Parola non trovata!");
}
}
input.close();
System.out.println("Arrivederci!");
}
}
π Esempio: Contatore Parole
import java.util.HashMap;
public class ContatoreParole {
public static void main(String[] args) {
String testo = "java Γ¨ bello java Γ¨ potente java Γ¨ usato molto";
String[] parole = testo.split(" ");
HashMap conteggio = new HashMap<>();
for (String parola : parole) {
if (conteggio.containsKey(parola)) {
// Incrementa conteggio esistente
int count = conteggio.get(parola);
conteggio.put(parola, count + 1);
} else {
// Prima occorrenza
conteggio.put(parola, 1);
}
}
System.out.println("=== Frequenza Parole ===");
for (String parola : conteggio.keySet()) {
System.out.println(parola + ": " + conteggio.get(parola) + " volte");
}
}
}
π Esempio: Registro Studenti
import java.util.HashMap;
import java.util.ArrayList;
class Studente {
private String nome;
private ArrayList voti;
public Studente(String nome) {
this.nome = nome;
this.voti = new ArrayList<>();
}
public void aggiungiVoto(int voto) {
voti.add(voto);
}
public double getMedia() {
if (voti.isEmpty()) return 0;
int somma = 0;
for (int voto : voti) {
somma += voto;
}
return (double) somma / voti.size();
}
public String getNome() { return nome; }
public ArrayList getVoti() { return voti; }
}
public class RegistroClasse {
public static void main(String[] args) {
HashMap registro = new HashMap<>();
// Aggiungo studenti
registro.put("12345", new Studente("Mario Rossi"));
registro.put("67890", new Studente("Giulia Bianchi"));
registro.put("11111", new Studente("Luca Verdi"));
// Aggiungo voti
registro.get("12345").aggiungiVoto(8);
registro.get("12345").aggiungiVoto(7);
registro.get("12345").aggiungiVoto(9);
registro.get("67890").aggiungiVoto(9);
registro.get("67890").aggiungiVoto(10);
registro.get("11111").aggiungiVoto(6);
registro.get("11111").aggiungiVoto(7);
registro.get("11111").aggiungiVoto(6);
// Stampo report
System.out.println("=== Report Classe ===");
for (String matricola : registro.keySet()) {
Studente s = registro.get(matricola);
System.out.println("\n" + s.getNome() + " (Matricola: " + matricola + ")");
System.out.println("Voti: " + s.getVoti());
System.out.println("Media: " + s.getMedia());
}
}
}
βοΈ Esercizi
Esercizio 1: Rubrica Telefonica
FACILEHashMap
Esercizio 2: Magazzino
MEDIOHashMap
Esercizio 3: Statistiche Testo
MEDIOConta frequenza lettere in un testo con HashMap
π― Concetti Chiave
- Map = coppie chiave-valore
- put(key, value) per aggiungere
- get(key) per ottenere valore
- containsKey() per verificare chiave
- HashMap: non ordinata, veloce
- TreeMap: ordinata per chiave
- Perfetta per dizionari, rubrica, contatori