ComenzarEmpieza gratis

Implementar una caché LRU

Estás desarrollando una aplicación web que recupera con frecuencia información de perfiles de usuario como cadenas. Para mejorar el rendimiento, quieres implementar una caché sencilla que almacene estas cadenas de perfil y pueda identificar qué entradas fueron las menos utilizadas recientemente.

La clase CacheEntry ya está precargada para ti.

Este ejercicio forma parte del curso

Optimizing Code in Java

Ver curso

Instrucciones del ejercicio

  • En el método get(), recupera la entrada de cache para la key indicada.
  • Tras recuperar la key, actualiza su hora de acceso.
  • Después de insertar una entrada en la caché, si se supera la capacidad, elimina la entrada menos recientemente utilizada.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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) {}
}
Editar y ejecutar código