Junior
Stretli ste sa s LinkedHashMap?
sobes.tech AI
Odpoveď od AI
Áno, stretol som sa tým. LinkedHashMap v Jave a Kotlin je implementácia rozhrania Map. Kombinuje vlastnosti HashMap (rýchly prístup podľa kľúča O(1) v priemere) a LinkedList (uchováva poradie vloženia prvkov).
Hlavné vlastnosti:
- Uchovávanie poradia: Iterácia cez prvky prebieha v poradí, v akom boli pridané.
- Výkon: Pridanie, odstránenie a vyhľadávanie prvkov sa vykonáva s amortizovanou konštantnou zložitostí (O(1)), ako pri
HashMap. - Pamäť: V porovnaní s
HashMapLinkedHashMappoužíva trochu viac pamäte na uloženie väzieb medzi prvkami. - Režim prístupu: Môže byť nastavená na uchovávanie poradia prístupu (posledne použité prvky sa presúvajú na koniec zoznamu), čo je užitočné pre implementáciu cache s politikou najmenej používaných (LRU - Least Recently Used).
Príklad použitia pre LRU cache:
// Vytvárame cache s maximálnou veľkosťou 5
// true v konštruktore zapína režim prístupu
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Odstraňujeme najstarší prvok, ak veľkosť presahuje 5
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Prístup k key1, presunie sa na koniec
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Cache presahuje veľkosť, odstraňuje najstarší (key2, ak bez prístupu; key3, ak s prístupom k key1)
System.out.println(lruCache);
// Vytvárame cache s režimom prístupu (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Odstraňujeme najstarší prvok, ak veľkosť presahuje 5
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Prístup k key1, presunie sa na koniec
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Cache presahuje veľkosť, odstraňuje sa najstarší
println(lruCache)
LinkedHashMap je užitočná, keď je dôležitý poradie iterácie cez prvky, ako aj pre implementáciu jednoduchých LRU cache.