Junior
Ar kada nors dirbote su LinkedHashMap?
sobes.tech AI
Atsakymas iš AI
Taip, esu susidūręs. LinkedHashMap Java ir Kotlin'e yra Map sąsajos įgyvendinimas. Ji sujungia HashMap savybes (greitas prieiga per raktą O(1) vidutiniškai) ir LinkedList (saugo įterpimo tvarką).
Pagrindinės savybės:
- Tvarkos išsaugojimas: Iteracija per elementus vyksta jų pridėjimo tvarka.
- Veikimas: Pridėjimas, šalinimas ir paieška vyksta su amortizuota pastovia sudėtingumu (O(1)), kaip
HashMap. - Atmintis: Palyginti su
HashMap,LinkedHashMapnaudoja šiek tiek daugiau atminties elementų ryšiams saugoti. - Prieigos režimas: Gali būti nustatytas išsaugoti prieigos tvarką (paskutiniai naudoti elementai perkeliami į pabaigą), kas naudinga įgyvendinant mažiausiai naudojamų (LRU - Least Recently Used) talpyklas.
Pavyzdys LRU talpyklai:
// Sukuriame talpyklą su maksimaliu dydžiu 5
// true konstruktoriuje įjungia prieigos režimą
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Šalinti seniausią elementą, jei dydis viršija 5
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Prieiga prie key1, jis perkeliama į pabaigą
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Talpykla viršija dydį, išimamas seniausias (key2, jei be prieigos; key3, jei su prieiga prie key1)
System.out.println(lruCache);
// Sukuriame su prieigos režimu (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Šalinti seniausią elementą, jei dydis viršija 5
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Prieiga prie key1, jis perkeliama į pabaigą
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Talpykla viršija dydį, išimamas seniausias
println(lruCache)
LinkedHashMap yra naudinga, kai svarbi iteracijos tvarka, taip pat ir paprastai įgyvendinant LRU talpyklas.