HashMap con sólo la mayoría de las entradas recientes

Tanu Garg:

Recientemente tuve una entrevista donde el entrevistador me pidió que crear una HashMapque tiene un máximo de 7 pares clave / valor. Si se añade un par de claves / valor octavo, el par primero de clave / valor debe ser retirado y la octava insertado para reemplazarlo, etc.

¿Qué es una buena estrategia para resolver este problema?

Shash678:

Hacer una estructura de datos utilizando LinkedHashMap y anular removeEldestEntry es decir algo como esto:

import java.util.LinkedHashMap;

class CustomHashMap extends LinkedHashMap<Integer, Integer> {
    private int capacity;

    public CustomHashMap(int capacity) {
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    public int get(int key) {
        return super.getOrDefault(key, -1);
    }

    public void put(int key, int value) {
        super.put(key, value);
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
        return size() > capacity; 
    }
}

Alternativamente, si no se le permite utilizar las bibliotecas estándar o si está utilizando un lenguaje que no tiene una ordenada diccionario estructura como Java / Python se puede utilizar un Hashtable+ y una DoubleEndedLinkedListque puede definir usted mismo y lograr lo mismo o utilizar un Deque:

  • Complejidad del tiempo: O(1) por tanto PUT y GET.
  • La complejidad de las instalaciones: O(capacity) .

A pesar de que usted tiene que escribir un código mucho más.


Versión genérica según @Holger solicitud 's :

import java.util.LinkedHashMap;
import java.util.Map;

class CustomHashMap<K, V> extends LinkedHashMap<K, V> {
    private int capacity;

    public CustomHashMap(int capacity) {
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > capacity;
    }
}

Ejemplo de Uso:

class Main {
    public static void main(String[] args) {
        CustomHashMap map = new CustomHashMap(3);
        map.put(1, null);
        map.put(2, null);
        map.put(3, null);
        map.put(4, null);
        System.out.println(map.keySet());
    }
}

Salida:

[2, 3, 4]

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=229749&siteId=1
Recomendado
Clasificación