File tree 1 file changed +19
-2
lines changed
src/main/java/com/crossoverjie/actual
1 file changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -21,26 +21,39 @@ public class LRUMap<K, V> {
21
21
private int nodeCount ;
22
22
23
23
24
+ /**
25
+ * 头结点
26
+ */
24
27
private Node <K , V > header ;
28
+
29
+ /**
30
+ * 尾结点
31
+ */
25
32
private Node <K , V > tailer ;
26
33
27
34
public LRUMap (int queueSize ) {
28
35
this .queueSize = queueSize ;
36
+ //头结点的下一个结点为空
29
37
header = new Node <>();
30
38
header .next = null ;
31
39
40
+ //尾结点的上一个结点为空
32
41
tailer = new Node <>();
33
42
tailer .tail = null ;
34
43
35
- //双向链表
44
+ //双向链表 头结点的上结点指向尾结点
36
45
header .tail = tailer ;
46
+
47
+ //尾结点的下结点指向头结点
37
48
tailer .next = header ;
38
49
39
50
40
51
}
41
52
42
53
public void put (K key , V value ) {
43
54
cacheMap .put (key , value );
55
+
56
+ //双向链表中添加结点
44
57
addNode (key , value );
45
58
}
46
59
@@ -50,9 +63,10 @@ private void addNode(K key, V value) {
50
63
51
64
//容量满了删除最后一个
52
65
if (queueSize == nodeCount ) {
66
+ //删除尾结点
53
67
delTail ();
54
68
55
- //写入表头
69
+ //写入头结点
56
70
addHead (node );
57
71
} else {
58
72
addHead (node );
@@ -70,11 +84,13 @@ private void addNode(K key, V value) {
70
84
*/
71
85
private void addHead (Node <K , V > node ) {
72
86
87
+ //写入头结点
73
88
header .next = node ;
74
89
node .tail = header ;
75
90
header = node ;
76
91
nodeCount ++;
77
92
93
+ //如果写入的数据大于2个 就将初始化的头尾结点删除
78
94
if (nodeCount == 2 ) {
79
95
tailer .next .next .tail = null ;
80
96
tailer = tailer .next .next ;
@@ -83,6 +99,7 @@ private void addHead(Node<K, V> node) {
83
99
}
84
100
85
101
private void delTail () {
102
+ //把尾结点从缓存中删除
86
103
cacheMap .remove (tailer .getKey ());
87
104
88
105
//删除尾结点
You can’t perform that action at this time.
0 commit comments