import java.util.*; import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class Solution { private LinkedHashMap<Integer,Integer> lMap = new LinkedHashMap<>(); private int lruSize = 0; /** * lru design * @param operators int整型二维数组 the ops * @param k int整型 the k * @return int整型一维数组 */ public int[] LRU (int[][] operators, int k) { // write code here lruSize = k; List<Integer> result = new ArrayList<>(); if(operators == null){ return new int[]{}; } for(int i = 0;i < operators.length;i++){ int[] next = operators[i]; if(next[0] == 1){ set(next[1],next[2]); } else if(next[0] == 2){ result.add(get(next[1])); } } int[] res = new int[result.size()]; for(int i = 0;i<result.size();i++){ res[i] = result.get(i); } return res; } public void set(Integer key,Integer value){ //第一步 判断是否已经存在 存在就删除 if(lMap.containsKey(key)){ lMap.remove(key); } //第二步 判断是否将要超过大小 是就删除最旧的 if(lMap.size() == lruSize){ Iterator<Integer> it = lMap.keySet().iterator(); lMap.remove(it.next()); } lMap.put(key,value); } public int get(Integer key){ if(lMap.containsKey(key)){ //变成最近使用 int value = lMap.get(key); lMap.remove(key); lMap.put(key,value); return value; } return -1; } }