Junior
Ai mai lucrat cu LinkedHashMap?
sobes.tech AI
Răspuns de la AI
Da, am experiență. LinkedHashMap în Java și Kotlin este o implementare a interfeței Map. Combină proprietățile HashMap (accès rapid după cheie O(1) în medie) și LinkedList (menține ordinea de inserare a elementelor).
Caracteristici principale:
- Păstrarea ordinii: Iterarea asupra elementelor se face în ordinea în care au fost adăugate.
- Performanță: Adăugarea, eliminarea și căutarea elementelor se realizează cu o complexitate amortizată constantă (O(1)), ca în
HashMap. - Memorie: Comparativ cu
HashMap,LinkedHashMapfolosește puțină memorie în plus pentru a stoca legăturile între elemente. - Mod de acces: Poate fi configurat pentru a păstra ordinea de acces (elementele utilizate cel mai recent sunt mutate în finalul listei), ceea ce este util pentru implementarea cache-urilor simple LRU (Least Recently Used).
Exemplu de utilizare pentru un cache LRU:
// Creăm un cache cu dimensiunea maximă de 5
// true în constructor activează modul de acces
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Elimină cel mai vechi element dacă dimensiunea depășește 5
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Acces la key1, se mută în final
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Cache-ul depășește dimensiunea, se elimină cel mai vechi (key2, dacă fără acces; key3, dacă cu acces la key1)
System.out.println(lruCache);
// Creăm un cache cu modul de acces (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Elimină cel mai vechi element dacă dimensiunea depășește 5
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Acces la key1, se mută în final
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Cache-ul depășește dimensiunea, se elimină cel mai vechi
println(lruCache)
LinkedHashMap este util atunci când ordinea de iterare a elementelor este importantă, precum și pentru implementarea cache-urilor LRU simple.