LRU和AdMeta Cache

146 LRUキャッシュ機構  面接の質問16.25。LRUキャッシュ

1  クラスLRUCache {
 2      パブリック クラスDlinkNode {
 3          プライベート int型のキー。
4          プライベート int型のval;
5          プライベートDlinkNode権;
6          プライベートDlinkNodeは左。
7  
8          パブリックDlinkNode(){
 9          }
 10  
11          公衆 DlinkNode(int型のキー、int型の値){
 12              この .KEY = キー。
13              この .val = 値。
14          }
15      }
 16  
17      プライベートマップ<整数、DlinkNode>マップ= 新しい HashMapの<> ();
18      プライベート DlinkNodeヘッド= 新しい DlinkNode(-1、-1 );
19      プライベート DlinkNodeテール= 新しい DlinkNode(-1、-1 );
20      プライベート int型の容量;
21  
22      公共 LRUCache(int型の容量){
 23          この .capacity = 容量。
24          head.right = 尾;
25          tail.left = ヘッド。
26      }
 27  
28      公共 int型のget(int型のキー){
 29          であれば(map.containsKey(キー)){
 30              DlinkNodeノード= map.get(キー)。
31              updateNode(ノード)。   // !!! 
32              リターンmap.get(キー).val。
33          } {
 34              リターン -1 35          }
 36      }
 37  
38      公共 ボイド PUT(INTキー、int型の値){
 39         もし(map.containsKey(キー)){
 40              DlinkNodeノード= map.get(キー)。
41              node.val = 値。
42              updateNode(ノード)。  // !!! 注意更新结点位置
43          } {
 44              であれば(map.size()== 容量){
 45                  removeFromHead()。
46              }
 47              DlinkNodeノード= 新しいDlinkNode(キー、値)。
48              addToTail(ノード)。
49          }
 50      }
 51  
52     公共 ボイドremoveFromHead(){
 53          DlinkNodeデル= head.right。
54          map.remove(del.key)。
55          head.right = del.right。
56          del.right.left = ヘッド。
57          デル= NULL ;
58      }
 59  
60      公共 ボイドaddToTail(DlinkNodeノード){
 61          map.put(node.key、ノード)。
62          DlinkNode予備= tail.left。
63          pre.right = ノード。
64          node.left = プリ;
65         node.right = 尾。
66          tail.left =ノード。  // !!! 忘记这一句、调了一下午
67      }
 68  
69      公共 ボイドupdateNode(DlinkNodeノード){
 70          DlinkNode左= node.left。
71          DlinkNode右= node.right。
72          left.right = 右。
73          right.left =は、左;
74          addToTail(ノード)。
75      }
 76 }

 

460 LFUキャッシュ

 

おすすめ

転載: www.cnblogs.com/naonaoling/p/12408443.html
おすすめ