Utilisation LinkedHashMap à mettre en œuvre de cache LRU

J'essayais de mettre en œuvre un cache LRU à l'aide de LinkedHashMap.
Dans la documentation de LinkedHashMap (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html), il est dit:

Noter que l'ordre d'insertion n'est pas affectée si une clé est à nouveau inséré dans la carte.

Mais quand je fais ce qui suit met

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int size;

    public static void main(String[] args) {
        LRUCache<Integer, Integer> cache = LRUCache.newInstance(2);
        cache.put(1, 1);
        cache.put(2, 2);
        cache.put(1, 1);
        cache.put(3, 3);

        System.out.println(cache);
    }

    private LRUCache(int size) {
        super(size, 0.75f, true);
        this.size = size;
    }

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

    public static <K, V> LRUCache<K, V> newInstance(int size) {
        return new LRUCache<K, V>(size);
    }

}

La sortie est

{1=1, 3=3}

Qui indique que la ré-inséré n'a affecté l'ordre.
Quelqu'un sait de toute explication?

Je me demande, êtes-vous de le faire dans un but précis? Parce que Java fournit déjà un WeakHashMap qui fournit cette fonctionnalité. docs.oracle.com/javase/7/docs/api/java/util/WeakHashMap.html
Si la commande ne sera pas affectée par la ré-insertion. L'ordre doit être {2=2, 3=3}, depuis le {1=1} est ajouté en premier et ré-inséré.
WeakHashMap ne pas faire ce que vous pense. Ce n'est pas la même chose qu'un LRU cache.
c'est exactement ce que je pense. Il fournit une structure de données qui permet de stocker en cache les valeurs sans se soucier de les éliminer si elles ne sont pas mentionnées ailleurs dans le code. Qui est un des ordures collectées façon de mettre en œuvre un cache LRU. Si vous n'avez pas l'obligation d'essuyer les anciennes valeurs (pour l'actualisation des questions, et c'est le but précis je parlais), alors il répond exactement à ce problème en permettant de Java en vue de leur libération juste quand il y a la nécessité.
Je suis pour la mise en œuvre de cette pratique de codage. Je pense à l'aide de la weakHashMap est une meilleure façon, si je suis à l'aide de la LRU pour tenir temp objets et laissez GC s'occuper de tout. Merci

OriginalL'auteur Lei Chen | 2014-12-15