基于最少使用的淘汰机制的缓存算法
实现方法
public void setSize(final int size) {
// LinkedHashMap的一个构造函数,当参数accessOrder为true时,即会按照访问顺序排序,最近访问的放在最前,最早访问的放在后面
keyMap = new LinkedHashMap<Object, Object>(size, .75F, true) {
private static final long serialVersionUID = 4267176411845948333L;
// LinkedHashMap自带的判断是否删除最老的元素方法,默认返回false,即不删除老数据
// 重写这个方法,当满足一定条件时删除最老的键
@Override
protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
boolean tooBig = size() > size;
if (tooBig) {
eldestKey = eldest.getKey();
}
return tooBig;
}
};
}
public Object getObject(Object key) {
keyMap.get(key); // touch // 刷新 keyMap 的访问顺序
return delegate.getObject(key);// 获得缓存值
}
是基于先进先出的淘汰机制的 Cache 实现类
具体实现方法:
//keyList设置为LinkedList
private final Deque<Object> keyList=new LinkedList<>();
private void cycleKeyList(Object key) {
keyList.addLast(key);
// 超过上限,将队首位移除
if (keyList.size() > size) {
Object oldestKey = keyList.removeFirst();
delegate.removeObject(oldestKey);
}
}