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