Aan de slagGa gratis aan de slag

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

Cursus bekijken

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.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in 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