-
缓存淘汰算法LRU算法,最近最少使用
-
根据数据的历史访问记录来进行淘汰数据,其核心思想是如果数据最近被访问过,那么将来被访问的几率也更高
-
在java中的LRU算法,主要利用的是LinkedHshMap容器
-
LRU算法实现
-
LinkedHashMap底层就使用HashMap加双链表来实现的,而且本身已经实现了按照访问顺序的存储
-
LinkedHashMap中本身就实现了一个方案removeEldestEntry用于判断是否需要移除最不常读取的数,方法默认是直接返回false,不会移除元素
-
因此需要重写这个方法,可以实现当缓存满了之后,就移除最不常用的数据
-
public calss LruCache<K,V> extends LinkedHashMap<K,V>{private int size;public LruCache(int size){super(size,0.75f,true);this.size = size;}@Overrideprotected boolean removeEldestEntry(Map.Entry<K,V> eldest){//当元素个数,超过指定的大小时,淘汰最老的数据return size() >size;}public static void main(String[] args){LruCache<String,Integer> cache = new LruCache<>(4);for(int i=0; i<8; i++){if(i==6){cache.get("lpy_2");}cache.put("lpy_"+i,i);System.out.println(i+":"+cache);}System.out.println(cache.size);} }
-
当I==6时,主动访问了一下lpy_2,主要就是不希望淘汰他
-