// 根据key得到value public V get(K k) { if (keyNodeMap.containsKey(k)) { Node<V> cur = keyNodeMap.get(k); // 最新操作的节点移到队头 nDLList.moveToTail(cur); return cur.value; } else { return null; } }
public void set(K k, V value) { if (keyNodeMap.containsKey(k)) { // 更新节点 Node<V> cur = keyNodeMap.get(k); cur.value = value; // 操作过的节点移到队头 nDLList.moveToTail(cur); } else { // 如果此时窗口达到最大值,则把最久没有用的即头结点去掉 if (keyNodeMap.size() == windowSize) { removeMostUnusedCache(); } // 新增节点 Node<V> newNode = new Node<V>(value); keyNodeMap.put(k, newNode); nodeKeyMap.put(newNode, k); // 移到队尾 nDLList.addToTail(newNode); } }