@@ -5,44 +5,44 @@ class Node{
5
5
public Node pre ;//指向前面的指针
6
6
public Node next ;//指向后面的指针
7
7
public Node (int key ,int value ){
8
- this .val = value ;
9
- this .key = key ;
8
+ this .val = value ;
9
+ this .key = key ;
10
10
}
11
11
}
12
12
class LRUCache {
13
13
int capacity ;//容量
14
14
Node head ;//双向链表的头,维护这个指针,因为set,get时需要在头部操作
15
15
Node end ;//双向链表的尾,set时,要是满了,需要将链表的最后一个节点remove
16
- HashMap <Integer ,Node > map = new HashMap <Integer ,Node >();//hash表
16
+ HashMap <Integer ,Node > map = new HashMap <Integer ,Node >();//hash表
17
17
public LRUCache (int capacity ) {
18
- this .capacity = capacity ;
18
+ this .capacity = capacity ;
19
19
}
20
20
//添加,删除尾部,插入头部的操作
21
21
public void remove (Node node ){
22
- Node cur = node ;
23
- Node pre = node .pre ;
24
- Node post = node .next ;
25
- if (pre == null ){//说明cur是头部节点
26
- head = post ;
22
+ Node cur = node ;
23
+ Node pre = node .pre ;
24
+ Node post = node .next ;
25
+ if (pre == null ){//说明cur是头部节点
26
+ head = post ;
27
27
}
28
- else pre .next = post ;//更新指针,删除
29
- if (post == null ){//说明cur是最后的节点
30
- end = pre ;
28
+ else pre .next = post ;//更新指针,删除
29
+ if (post == null ){//说明cur是最后的节点
30
+ end = pre ;
31
31
}
32
- else post .pre = pre ;
32
+ else post .pre = pre ;
33
33
}
34
34
public void setHead (Node node ){
35
35
//直接插入
36
- node .next = head ;
37
- node .pre = null ;
38
- if (head != null ) head .pre = node ;//防止第一次插入时为空
39
- head = node ;
40
- if (end ==null ) end = node ;
36
+ node .next = head ;
37
+ node .pre = null ;
38
+ if (head != null ) head .pre = node ;//防止第一次插入时为空
39
+ head = node ;
40
+ if (end ==null ) end = node ;
41
41
}
42
42
public int get (int key ) {
43
43
if (map .containsKey (key )){
44
44
//需要把对应的节点调整到头部
45
- Node latest = map .get (key );
45
+ Node latest = map .get (key );
46
46
remove (latest );
47
47
setHead (latest );
48
48
//返回value
@@ -54,18 +54,18 @@ public int get(int key) {
54
54
public void put (int key , int value ) {
55
55
if (map .containsKey (key )){//这个key原来存在
56
56
//只需要把key对应的node提到最前面,更新value
57
- Node oldNode = map .get (key );
58
- oldNode .val = value ;
57
+ Node oldNode = map .get (key );
58
+ oldNode .val = value ;
59
59
remove (oldNode );
60
60
setHead (oldNode );
61
61
}
62
62
else {
63
63
//这个key原来不存在,需要重新new出来
64
- Node newNode = new Node (key ,value );
64
+ Node newNode = new Node (key ,value );
65
65
//接下来要考虑容量
66
- if (map .size ()< capacity ){
66
+ if (map .size () < capacity ){
67
67
setHead (newNode );
68
- map .put (key ,newNode );
68
+ map .put (key , newNode );
69
69
}
70
70
else {
71
71
//容量不够,需要先将map中,最不常使用的那个删除了删除
@@ -74,7 +74,7 @@ public void put(int key, int value) {
74
74
remove (end );
75
75
setHead (newNode );
76
76
//放入新的
77
- map .put (key ,newNode );
77
+ map .put (key , newNode );
78
78
}
79
79
}
80
80
}
0 commit comments