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
Anleitung zur Übung
- Rufe in der Methode
get()den Eintrag auscachefür den angegebenenkeyab. - Aktualisiere nach dem Abrufen des
keydessen 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) {}
}