LoslegenKostenlos loslegen

Eine LRU-Cache implementieren

Du entwickelst eine Webanwendung, die häufig Benutzerprofilinformationen als Strings abruft. Um die Leistung zu verbessern, möchtest du einen einfachen Cache implementieren, der diese Profil-Strings speichert und erkennen kann, welche Einträge am längsten nicht verwendet wurden.

Die Klasse CacheEntry wurde für dich vorab geladen.

Diese Übung ist Teil des Kurses

Codeoptimierung in Java

Kurs anzeigen

Anleitung zur Übung

  • Rufe in der Methode get() den Eintrag aus cache für den angegebenen key ab.
  • Aktualisiere nach dem Abrufen des key dessen Zugriffszeit.
  • Wenn nach dem Einfügen eines Eintrags die Kapazität überschritten wurde, entferne den am wenigsten kürzlich verwendeten Eintrag.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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 bearbeiten und ausführen