背景
今天看到敖丙大佬的redis中,提到了lru算法,才知道原来Java自带的LinkedHashMap中其实自带了LRU(Least recently used,最近最少使用)算法的实现。
官方注释中有说明,removeEldestEntry方法在put和putAll的时候会调用,自己用idea跟踪发现也确实如此
因此如果面试的时候让我们手写一个LRU算法,可以直接基于LinkedHashMap去实现,主要是重写removeEldestEntry
class LRUCache extends LinkedHashMap<Integer, Integer>{
private int capacity;
public LRUCache(int capacity) {
super(capacity, 0.75F, true);
this.capacity = capacity;
}
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
return size() > capacity;
}
}