Я пытался реализовать кеш LRU с помощью LinkedHashMap. В документации LinkedHashMap (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html) говорится:
Обратите внимание, что порядок вставки не изменяется, если ключ повторно вставлен в карту.
Но когда я делаю следующие puts
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);
}
}
Выходной сигнал
{1=1, 3=3}
Что указывает на то, что повторно вставленный код повлиял на порядок. Кто-нибудь знает какие-либо объяснения?