java – 使用LinkedHashMap实现LRU缓存
发布时间:2020-12-14 05:24:22 所属栏目:Java 来源:网络整理
导读:我试图使用LinkedHashMap实现LRU缓存. 在LinkedHashMap( http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说: 请注意,如果将键重新插入到地图中,则插入顺序不受影响. 但是当我做下面的表达 public class LRUCacheK,V ex
我试图使用LinkedHashMap实现LRU缓存.
在LinkedHashMap( http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说: 请注意,如果将键重新插入到地图中,则插入顺序不受影响. 但是当我做下面的表达 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} 这表明重新插入确实影响了订单. 解决方法
正如@Jeffrey所说,你正在使用accessOrder.创建LinkedHashMap时,第三个参数指定顺序如何更改.
"true for access-order,false for insertion-order" 对于LRU的更详细的实现,你可以看看这个 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |