LRU算法:最近最少使用,淘汰时间最长未被使用的数据。
实现思路:
1.创建一个队列,并设置队列的阈值。
2.将数据按顺序存放到队列中,新增数据时将数据添加到队列尾部,如果队列超过阈值,则从队列头部删除数据。
3.LinkedHashMap可以设置数据的访问顺序,并且在新增元素时可以删除最老的元素,所以可以用来实现LRU算法。
/**
*
* LRU算法:最近最少使用,淘汰时间最长未被使用的数据
* @param <K>
* @param <V>
*
* @version 1.0
*/
public class LRU<K, V> extends LinkedHashMap<K, V> {
private int cacheSize;
public LRU(int cacheSize) {
/**
* accessOrder: true=访问顺序排序(get/put时排序),false=插入顺序排序
*/
super(16, 0.75f, true);
this.cacheSize = cacheSize;
}
/**
* 新增元素时调用,返回true时删除最老元素
*/
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
return size() > cacheSize;
}
}