Sobes.tech
Junior

Kas olete kunagi töötanud LinkedHashMap-iga?

sobes.tech AI

Vastus AI-lt

Jah, ma olen sellega kokku puutunud. LinkedHashMap Java ja Kotlinis on Map liidese teostus. See ühendab HashMap omadused (kiire juurdepääs võtme järgi O(1) keskmiselt) ja LinkedList (hoiab elementide sisestamise järjekorda).

Peamised omadused:

  • Järjestuse säilitamine: Iteratsioon elementide üle toimub nende lisamise järjekorras.
  • Tõhusus: Elementide lisamine, eemaldamine ja otsimine toimub amortiseeritud konstantse keerukusega (O(1)), nagu HashMap.
  • Mälu: Võrreldes HashMap-iga kasutab LinkedHashMap veidi rohkem mälu ühenduste hoidmiseks elementide vahel.
  • Juurdepääsurežiim: Seda saab seadistada säilitama juurdepääsujärjestust (viimati kasutatud elemendid liiguvad lõppu), mis on kasulik lihtsate LRU (Least Recently Used) vahemälu rakendamisel.

Näide LRU-vahemälu kasutamiseks:

// Loome vahemälu maksimaalse suurusega 5
// true konfigureerib juurdepääsurežiimi
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
        // Eemaldame vanima elemendi, kui suurus ületab 5
        return size() > 5;
    }
};

lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Juurdepääs key1, see liigub lõppu
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Vahemälu ületab suuruse, eemaldatakse vanim (key2, kui ilma juurdepääsuta; key3, kui juurdepääsuga key1-ile)

System.out.println(lruCache);
// Loome juurdepääsurežiimiga (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
    override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
        // Eemaldame vanima elemendi, kui suurus ületab 5
        return size > 5
    }
}

lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Juurdepääs key1, see liigub lõppu
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Vahemälu ületab suuruse, eemaldatakse vanim

println(lruCache)

LinkedHashMap on kasulik, kui on oluline elementide iteratsiooni järjekord ning lihtsate LRU-vahemälu rakenduste teostamine.