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;
    }
}