使用LinkedHashMap的accessOrder属性和removeEldestEntry方法能实现LRU算法。
一、LinkedHashMap的accessOrder属性来判断按插入排序还是访问排序
1.accessOrder默认为false,按插入顺序排序;
2.accessOrder为ture时,按访问排序;
二、重写LinkedHashMap的removeEldestEntry方法来控制删除最久没有被访问的数据
1.return true时,添加新增数据,删除最久没有被访问数据。
2.return false时,继续扩大map容量,添加新增数据,不删除数据。
三、代码实现
public class LRUCache<K,V> extends LinkedHashMap<K, V> {
//最大缓存区
private int maxEntries;
public LRUCache(int maxEntries){
super(maxEntries, 0.75f, true);
this.maxEntries=maxEntries;
}
//重写removeEldestEntry,实现删除最老元素
@Override
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return size()>maxEntries;
}
public static void main