Junior
Да ли сте икада радили са LinkedHashMap?
sobes.tech АИ
Одговор од АИ
Da, susretao sam se. LinkedHashMap u Javi i Kotlinu je implementacija interfejsa Map. Kombinuje osobine HashMap (brz pristup po ključevi O(1) u proseku) i LinkedList (čuva redosled umetanja elemenata).
Glavne osobine:
- Čuvanje reda: Iteracija kroz elemente se vrši u redosledu u kojem su dodati.
- Performanse: Dodavanje, brisanje i pretraživanje elemenata vrši se sa amortizovanom konstantnom složenošću (O(1)), kao kod
HashMap. - Memorija: U poređenju sa
HashMap,LinkedHashMapkoristi malo više memorije za čuvanje veza između elemenata. - Režim pristupa: Može biti podešen na čuvanje reda pristupa (poslednji korišćeni elementi se pomeraju na kraj liste), što je korisno za implementaciju keševa sa politikom najređe korišćenih (LRU - Least Recently Used).
Primer korišćenja za LRU keš:
// Kreiramo keš sa maksimalnim brojem od 5
// true u konstruktoru uključuje režim pristupa
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Uklanjamo najstariji element ako je veličina veća od 5
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Pristup key1, on se pomera na kraj
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Keš premašuje veličinu, uklanja se najstariji (key2, ako bez pristupa; key3, ako sa pristupom ka key1)
System.out.println(lruCache);
// Kreiramo keš sa režimom pristupa (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Uklanjamo najstariji element ako je veličina veća od 5
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Pristup key1, on se pomera na kraj
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Keš premašuje veličinu, uklanja se najstariji
println(lruCache)
LinkedHashMap je korisna kada je važan redosled iteracije kroz elemente, kao i za implementaciju jednostavnih LRU keševa.