Example #1
0
 public void removeMostUnusedCache() {
   // 删除头结点
   Node<V> rNode = nDLList.removeHead();
   K rKey = nodeKeyMap.get(rNode);
   // hashMap中删除相关内容
   nodeKeyMap.remove(rNode);
   keyNodeMap.remove(rKey);
 }
Example #2
0
 // 根据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;
   }
 }
Example #3
0
 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);
   }
 }