一般默认是allkeys-lru
理解回收进程如何工作是非常重要的:
LinkHashMap里面的entry对象除了有map结构自带的属性外,还增加了before
和after
字段;
然后除了基本的map结构外,还有一个链表结构,链表结构就是依靠这个before和after字段来链接的。
所以map的里面的每个对象都是都是链表的其中一个成员。
当我们初始化LinkHashMap的时候,会有一个参数accessOrder
,当该参数为true的时候,每次put一个key之后,就会调整链表,把key对应的entry调整到链表的头。
java代码实现
public class Lru<K,V> extends LinkedHashMap<K,V> {
Lru(int initialCapacity){
super(initialCapacity, 0.75f, true);
}
public static void main(String[] args) {
Lru<String,String > lru = new Lru(10);
lru.put("1","1");
lru.put("3","3");
lru.put("2","2");
lru.put("4","4");
lru.put("5","5");
lru.put("10","10");
System.out.println(lru);
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return this.size() >=5;
}
}
要重写removeEldestEntry方法,用于判定删除键的时刻。
原文:https://www.cnblogs.com/yeyongjian/p/14127275.html