模拟就行!!!

import java.util.*;


public class Solution {
    /**
     * lru design
     * @param operators int整型二维数组 the ops
     * @param k int整型 the k
     * @return int整型一维数组
     */
    public int[] LRU (int[][] operators, int k) {
        // write code here
        class Node{
            int key,value;
            Node(int key,int value){
                this.key = key;
                this.value = value;
            }
            // List的indexOf是通过equals比较判断的,这里重写判断key的方法,key相同就代表一样
            public boolean equals(Object obj) {
                Node on = (Node)obj;
                return on.key == this.key;
            }
        }
        // 缓存
        List<Node> list = new ArrayList<>();
        // 题目要的结果集
        List<Integer> res = new ArrayList<>();
        for(int i=0; i<operators.length; i++){
            // set(key,value)
            if(operators[i][0] == 1){
                int index = list.indexOf(new Node(operators[i][1],0));
                // key不存在,就添加到缓存
                if(index == -1){
                    list.add(new Node(operators[i][1],operators[i][2]));
                // 存在就更新value
                }else{
                    Node n = list.get(index);
                    n.value = operators[i][2];
                    list.remove(index);
                    list.add(index,n);
                }
                // 超过k,就把第一个干掉
                if(list.size() == k+1){
                    list.remove(0);
                }
            // get(key)
            }else if(operators[i][0] == 2){
                int index = list.indexOf(new Node(operators[i][1],0));
                // key不存在
                if(index == -1){
                    res.add(-1);
                // key存在,把它移动到缓存的最后
                }else{
                    Node n = list.get(index);
                    res.add(n.value);
                    list.remove(index);
                    list.add(n);
                }
            }
        }
        Object[] rO = res.toArray();
        int[] result = new int[rO.length];
        for(int i=0; i<rO.length; i++){
            result[i] = (int) rO[i];
        }
        return result;
    }
}