使用LinkedHashMap是有序的,并且查找的效率可以达到O(1),所以使用LinkedHashMap()来实现lru,还是很方便的
大致思路: 首先标记元素长度n,初始为0,如果要换入2,先map.get(2)不存在且map的元素个数小于 块数,则放入map中,n++
如果map中有这个元素,那么则删除,在放入;
import java.util.LinkedHashMap;
import java.util.Map;
/*
* lru
*/
public class Lru {
public static void main(String[] args) {
Map<Integer,Integer> map=new LinkedHashMap<>();
int n=3;//块数
int count=0;//中断次数
int lenth=0;//map元素个数
int[] arr={3,4,3,1,2};
for(int i=0;i<arr.length;i++){
if(lenth<n && map.get(arr[i])==null){
map.put(arr[i], 0);
lenth++;
count++;
} else{
if(map.get(arr[i])==null){
for(Integer one:map.keySet()){
map.remove(one);
break;
}
map.put(arr[i], 0);
count++;
}else{
map.remove(arr[i]);
map.put(arr[i], 0);
}
}
}
for(Map.Entry<Integer, Integer> one:map.entrySet()){
System.out.println(one.getKey());
}
System.out.println("count:"+count);
}
}