基于JDK的LRU算法实现
-
缓存淘汰算法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; } @Override protected 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,主要就是不希望淘汰他
-