Aan de slagBegin gratis

Een LRU-cache implementeren

Je ontwikkelt een webapplicatie die vaak gebruikersprofielinformatie als strings ophaalt. Om de prestaties te verbeteren, wil je een eenvoudige cache implementeren die deze profiel-strings opslaat en kan bijhouden welke items het minst recent zijn gebruikt.

De klasse CacheEntry is alvast voor je geladen.

Deze oefening maakt deel uit van de cursus

Code optimaliseren in Java

Bekijk cursus

Oefeninstructies

  • Haal in de methode get() het cache-item op voor de opgegeven key.
  • Werk na het ophalen van de key de toegangstijd bij.
  • Als na het toevoegen van een item in de cache de capaciteit is overschreden, verwijder dan het minst recent gebruikte item.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

public class StringCache {
    private final int capacity = 100;
    private final Map cache = new HashMap<>();
    
    public String get(String key) {
        // Get the entry for the specified key
        CacheEntry entry = ____.get(____);
        if (entry == null) return null;
        // Update its access time
        entry.____();
        return entry.value;
    }
    
    public void put(String key, String value) {
        cache.put(key, new CacheEntry(value));
        if (cache.size() > capacity) {
            // If capacity exceeded, remove least recently used
            ____();
        }
    }

    void removeLeastRecentlyUsed() {
        String lruKey = null;
        long oldest = Long.MAX_VALUE;
        for (Map.Entry e : cache.entrySet()) {
            if (e.getValue().lastAccessed < oldest) {
                oldest = e.getValue().lastAccessed;
                lruKey = e.getKey();
            }
        }
        if (lruKey != null) { cache.remove(lruKey); }
    }

    public static void main(String[] args) {}
}
Code bewerken en uitvoeren