LoslegenKostenlos starten

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

<Kurs>Codeoptimierung in Java</Kurs>
Kurs ansehen

Übungsanweisungen

  • 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 praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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