package common;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author : zhaoliang
* @program :newCoder
* @description : LRU缓存策略
* @create : 2020/12/18 20:41
*/
public class LRUCache {
//设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。
//缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。
private int capacity;
Map<Integer,Integer> map;
public LRUCache(int capacity){
this.capacity = capacity;
map = new LinkedHashMap<>();
}
public int get(int key){
if (!map.containsKey(key)){
return -1;
}
//先拿出来,再放进去,调整访问量
Integer value = map.remove(key);
map.put(key,value);
return value;
}
public void put(int key,int value){
if (map.containsKey(key)){
//先拿出来,再放进去,调整访问量
map.remove(key);
map.put(key,value);
return;
}
map.put(key,value);
//超出capacity,删除最久没用的利用迭代器
if (map.size() > capacity){
map.remove(map.entrySet().iterator().next().getKey());
}
}
}