package leetcode;
import java.util.HashMap;
import java.util.LinkedList;
public class demo_146 {
private HashMap<Integer, Integer> map;
//LinkList是一个双向链表
private LinkedList<Integer> list;
private int capacity;
public demo_146(int capacity) {
// TODO Auto-generated constructor stub
map=new HashMap<Integer, Integer>();
list=new LinkedList<Integer>();
this.capacity=capacity;
}
//每次把最久未使用的放在双链表的表尾
//每次把最新使用的放在双链表的表头
public int get(int key) {
if(map.containsKey(key)) {
//LinkList中参数一定要是Integer类型,int类型传入时会被认为是index
Integer keys=Integer.valueOf(key);
//更新map中刚查找的元素在双链表中的位置
list.remove(keys);
list.addFirst(keys);
return map.get(keys);
}else {
return -1;
}
}
public void put(int key, int value) {
Integer keys=Integer.valueOf(key);
if(map.containsKey(keys)) {
map.remove(keys);
list.remove(keys);
}else {
if(map.size()>=capacity) {
//删除双链表中最后的元素,也是最久未使用的元素
map.remove(list.getLast());
list.removeLast();
}
}
map.put(keys, value);
list.addFirst(keys);
}
}