java linkedHashMap实现lru
*************************
相关类
linkedHashMap
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
final boolean accessOrder; //链表的排列顺序
//flase(默认):表示按插入顺序排序
//true:表示按访问顺序排序,最新访问的节点在链表尾部
public LinkedHashMap() {
super();
accessOrder = false;
}
public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
} //通过该构造函数将accessOrder设为true,表示按访问顺序排序
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
} //删除最早的元素,默认为false,若设置为true则可将队列头部的节点删除
*************************
示例
class LRUTest<K,V> extends LinkedHashMap<K,V>{
private int num;
public LRUTest(int num){
super(16,0.75f,true);
this.num=num;
}
public void setNum(int num) {
this.num = num;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > num;
}
}
public class MyTest9 {
public static void main(String[] args){
LRUTest<String,String> lruTest=new LRUTest<>(10);
for (int i=0;i<100;i++){
lruTest.put(i+"","瓜田李下"+i);
}
for(Map.Entry<String,String> entry:lruTest.entrySet()){
System.out.println("key:"+entry.getKey()+" ====> value:"+entry.getValue());
}
System.out.println("\nkey为98对应的value:"+lruTest.get("98"));
System.out.println("访问key为98的节点后输出 \n");
for (Map.Entry<String,String> entry:lruTest.entrySet()){
System.out.println("key:"+entry.getKey()+" ====> value:"+entry.getValue());
}
}
}
******************
控制台输出
key:90 ====> value:瓜田李下90
key:91 ====> value:瓜田李下91
key:92 ====> value:瓜田李下92
key:93 ====> value:瓜田李下93
key:94 ====> value:瓜田李下94
key:95 ====> value:瓜田李下95
key:96 ====> value:瓜田李下96
key:97 ====> value:瓜田李下97
key:98 ====> value:瓜田李下98
key:99 ====> value:瓜田李下99
key为98对应的value:瓜田李下98
访问key为98的节点后输出
key:90 ====> value:瓜田李下90
key:91 ====> value:瓜田李下91
key:92 ====> value:瓜田李下92
key:93 ====> value:瓜田李下93
key:94 ====> value:瓜田李下94
key:95 ====> value:瓜田李下95
key:96 ====> value:瓜田李下96
key:97 ====> value:瓜田李下97
key:99 ====> value:瓜田李下99
key:98 ====> value:瓜田李下98