Ce face Map
Un Map (dicționar, tabel asociativ) leagă fiecare cheie de o valoare: „Iași” → 290 000 locuitori, „Ana” → nota 9. Cheile sunt unice: dacă pui din nou o cheie existentă, valoarea veche este înlocuită. Valorile se pot repeta.
Operațiile de bază: put(cheie, valoare) adaugă sau înlocuiește, get(cheie) citește (sau null dacă nu există), containsKey verifică, remove șterge. Parcurgi perechile cu entrySet() sau forEach((k, v) -> ...).
Implementări: HashMap (cea mai rapidă, ordine nespecificată), LinkedHashMap (ordinea adăugării) și TreeMap (chei sortate). Map nu extinde Collection, dar îți dă colecții prin keySet(), values() și entrySet().
Parametri
| Parametru | Descriere |
|---|---|
K |
Tipul cheilor (de obicei String, Integer, un enum sau un record). |
V |
Tipul valorilor. |
Ce returnează
Un obiect care implementează Map.
Exemple
Exemplul 1: Populația orașelor
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<String, Integer> populatie = new TreeMap<>();
populatie.put("Iași", 290_000);
populatie.put("Cluj-Napoca", 286_000);
populatie.put("Timișoara", 250_000);
System.out.println(populatie);
System.out.println("Iași: " + populatie.get("Iași"));
System.out.println("Brașov: " + populatie.get("Brașov"));
System.out.println("Orașe: " + populatie.size());
}
}
Rezultat
{Cluj-Napoca=286000, Iași=290000, Timișoara=250000}
Iași: 290000
Brașov: null
Orașe: 3
Exemplul 2: Numărarea aparițiilor
Pentru fiecare cuvânt, merge pune 1 sau adună 1 la valoarea existentă.
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
String[] voturi = {"Ana", "Radu", "Ana", "Elena", "Ana", "Radu"};
Map<String, Integer> numar = new TreeMap<>();
for (String v : voturi) {
numar.merge(v, 1, Integer::sum);
}
numar.forEach((nume, n) -> System.out.println(nume + ": " + n + (n == 1 ? " vot" : " voturi")));
}
}
Rezultat
Ana: 3 voturi
Elena: 1 vot
Radu: 2 voturi
Exemplul 3: Cheile sunt unice
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> note = new LinkedHashMap<>();
note.put("Ana", 7);
note.put("Mihai", 9);
Integer veche = note.put("Ana", 10);
System.out.println("Valoarea înlocuită: " + veche);
System.out.println(note);
}
}
Rezultat
Valoarea înlocuită: 7
{Ana=10, Mihai=9}
Greșeli frecvente
- Scrii
new Map<>().Mapeste o interfață; foloseștenew HashMap<>()saunew TreeMap<>(). - Folosești
getși apoi faci calcule cu rezultatul fără să verificinull:int n = map.get("x");aruncăNullPointerExceptiondacă cheia lipsește. FoloseștegetOrDefault. - Te bazezi pe ordinea afișării unui
HashMap. Nu este garantată; foloseșteTreeMapsauLinkedHashMap.
Comenzi înrudite
HashMap: Dicționarul cel mai rapid: put, get și remove în timp aproape constant, dar fără ordine garantată a cheilor.TreeMap: Dicționar care ține cheile mereu sortate și oferă căutări de tip „prima cheie”, „cea mai apropiată cheie”, „intervalul de chei”.LinkedHashMap: HashMap care ține minte ordinea în care au fost adăugate cheile; parcurgerea și afișarea respectă această ordine.Map.put: put adaugă o pereche cheie → valoare sau înlocuiește valoarea unei chei existente; putAll copiază toate perechile altui map.Map.get: get returnează valoarea unei chei sau null dacă lipsește; getOrDefault returnează o valoare de rezervă în loc de null.Map.entrySet: entrySet() dă perechile cheie-valoare ale unui map, ca obiecte Map.Entry; Map.entry(k, v) creează o astfel de pereche.Map.merge: Pune valoarea dacă cheia lipsește; dacă există, combină valoarea veche cu cea nouă (de exemplu le adună). Ideal pentru numărători și totaluri.Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.