java的linkedHashMap已经基于双向链表和hashMap实现了LRU,只需要自定义重写即可。
public class Solution {
private LRUCache<Integer,Integer> cache;
public Solution(int capacity) {
this.cache = new LRUCache(capacity);
}
public int get(int key) {
Integer v = cache.get(key);
if (v == null){
return -1;
}
return v;
}
public void set(int key, int value) {
cache.put(key,value);
}
}
class LRUCache<K, V> extends LinkedHashMap<K, V> {
// 记录最大内存
private int maxSize;
public LRUCache(int initialCapacity) {
// 打开访问记录开关
super(initialCapacity, 0.75f, true);
this.maxSize = initialCapacity;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
// 源码返回false,改为超过最大内存就删除最久未访问数据
return super.size() > maxSize;
}
}