Sobes.tech
Junior

Heb je ooit met LinkedHashMap gewerkt?

sobes.tech AI

Antwoord van AI

Ja, ik heb ervaring ermee. LinkedHashMap in Java en Kotlin is een implementatie van de Map-interface. Het combineert de eigenschappen van HashMap (snelle toegang via sleutel O(1) gemiddeld) en LinkedList (houdt de volgorde van invoeging van elementen bij).

Belangrijkste kenmerken:

  • Volgorde behouden: Iteratie over de elementen gebeurt in de volgorde waarin ze zijn toegevoegd.
  • Prestaties: Het toevoegen, verwijderen en zoeken van elementen gebeurt met een geamortiseerde constante complexiteit (O(1)), zoals bij HashMap.
  • Geheugen: In vergelijking met HashMap gebruikt LinkedHashMap iets meer geheugen om de verbindingen tussen de elementen op te slaan.
  • Toegangsmodus: Kan worden geconfigureerd om de toegangvolgorde te behouden (de laatst gebruikte elementen worden naar het einde van de lijst verplaatst), wat handig is voor het implementeren van eenvoudige LRU-caches.

Voorbeeld van gebruik voor een LRU-cache:

// Maak een cache met een maximale grootte van 5
// true in de constructor activeert de toegangsmode
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
        // Verwijdert het oudste element als de grootte meer dan 5 is
        return size() > 5;
    }
};

lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Toegang tot key1, verplaatst het naar het einde
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // De cache overschrijdt de grootte, oudste wordt verwijderd (key2 of key3 afhankelijk van toegang)

System.out.println(lruCache);
// Maak een cache met toegangsmode (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
    override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
        // Verwijdert het oudste element als de grootte meer dan 5 is
        return size > 5
    }
}

lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Toegang tot key1, verplaatst het naar het einde
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // De cache overschrijdt de grootte, oudste wordt verwijderd

println(lruCache)

LinkedHashMap is handig wanneer de iteratievolgorde van de elementen belangrijk is, evenals voor het implementeren van eenvoudige LRU-caches.