import java.util.LinkedHashMap;
import java.util.Map;
public class LRUAssessOrder {
Map<Integer, Integer> linkedHashMap;
int capacity;
public LRUAssessOrder(int capacity) {
this.capacity = capacity;
/**
* accessOrder 根据访问频率进行排序,最新被访问的数据放在链表尾部,最老的数据放在链表头部
*/
linkedHashMap = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
if (size() > capacity) {
return true;
}
return false;
}
// 如果没有查到value,返回-1
@Override
public Integer get(Object key) {
return super.get(key) == null ? -1 : super.get(key);
}
};
}
public int get(int key) {
return linkedHashMap.get(key);
}
public void put(int key, int value) {
linkedHashMap.put(key, value);
}
public static void main(String[] args) {
LRUAssessOrder cache = new LRUAssessOrder(2);
cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // 返回 1
cache.put(3, 3); // 该操作会使得密钥 2 作废
cache.get(2); // 返回 -1 (未找到)
cache.put(4, 4); // 该操作会使得密钥 1 作废
cache.get(1); // 返回 -1 (未找到)
cache.get(3); // 返回 3
cache.get(4); // 返回 4
}
}
LRU缓存实现
最新推荐文章于 2024-07-06 15:56:58 发布