Ce face LinkedHashMap
LinkedHashMap este un HashMap care leagă în plus perechile într-o listă, în ordinea adăugării. Parcurgerea dă cheile în ordinea în care au intrat prima dată. Dacă pui din nou o cheie existentă, valoarea se schimbă, dar poziția rămâne aceeași.
Cu constructorul cu trei argumente și ordineAcces = true, ordinea devine cea a ultimei folosiri: fiecare get sau put mută cheia la final. Împreună cu metoda removeEldestEntry, suprascrisă, obții un cache LRU (care șterge elementul folosit cel mai demult).
Viteza este aproape aceeași ca la HashMap. Folosește-l când ordinea contează pentru afișare: un meniu, pașii unui formular, coloanele unui raport.
Parametri
| Parametru | Descriere |
|---|---|
m |
Map din care se copiază perechile, în ordinea lui. |
ordineAcces |
false (implicit): ordinea adăugării. true: ordinea ultimei accesări. |
Ce returnează
Un dicționar ordonat, modificabil.
Exemple
Exemplul 1: Pașii unei comenzi, în ordine
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, String> pasi = new LinkedHashMap<>();
pasi.put("coș", "gata");
pasi.put("adresă", "gata");
pasi.put("plată", "în lucru");
pasi.put("confirmare", "în așteptare");
pasi.put("coș", "modificat"); // valoare nouă, aceeași poziție
pasi.forEach((pas, stare) -> System.out.println(pas + ": " + stare));
}
}
Rezultat
coș: modificat
adresă: gata
plată: în lucru
confirmare: în așteptare
Exemplul 2: Cache cu ultimele 3 orașe căutate
Clasa anonimă suprascrie removeEldestEntry; când sunt mai mult de 3 perechi, cea folosită cel mai demult dispare. serial cere un serialVersionUID pentru clasele serializabile.
import java.io.Serial;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> cache = new LinkedHashMap<>(16, 0.75f, true) {
@Serial
private static final long serialVersionUID = 1L;
@Override
protected boolean removeEldestEntry(Map.Entry<String, Integer> cea) {
return size() > 3;
}
};
cache.put("Iași", 290_000);
cache.put("Cluj", 286_000);
cache.put("Arad", 145_000);
cache.get("Iași"); // Iași devine cel mai recent
cache.put("Sibiu", 134_000); // iese Cluj
System.out.println(cache.keySet());
}
}
Rezultat
[Arad, Iași, Sibiu]
Greșeli frecvente
- Te aștepți ca o cheie pusă din nou să treacă la final. În modul implicit își păstrează poziția; ca să o muți, întâi
remove, apoiput. - Crezi că
LinkedHashMapsortează cheile. Păstrează ordinea adăugării; pentru sortare foloseșteTreeMap.
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”.Map: Interfața pentru dicționare: perechi cheie → valoare, în care găsești rapid valoarea după cheie. Cheile sunt unice.HashSet: Mulțimea cea mai rapidă: add, remove și contains în timp aproape constant, dar fără o ordine garantată a elementelor.Map.forEach: Parcurge toate perechile unui map și apelează o funcție cu cheia și valoarea fiecăreia: map.forEach((k, v) -> …).