import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author bo bo
* @Package com.bobo
* @date 2020/6/2 14:25
* @copyright: Copyright (c) 2020
* @version: V1.0
* @Description: 手写LRU缓存
*/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private final int CACHE_SIZE;
/**
* 设置HashMap的初始大小,
* 同时最后一个 true ,是让linkHashMap按照访问顺序来进行排序,最近访问的放在头部,最旧的数据放在尾部
* @param cacheSize
*/
public LRUCache(int cacheSize) {
super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
CACHE_SIZE = cacheSize;
}
/**
* 当LinkHashMap内的数据size大于额定的Cache size ,那么就自动删除最老的数据
*/
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > CACHE_SIZE;
}
}