mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
Merge pull request #2404 from yqq20001015/patch-1
Update linkedhashmap-source-code.md
This commit is contained in:
commit
a7c89a8702
@ -272,7 +272,7 @@ void afterNodeAccess(Node < K, V > e) { // move node to last
|
|||||||
if (b == null)
|
if (b == null)
|
||||||
head = a;
|
head = a;
|
||||||
else
|
else
|
||||||
//如果后继节点不为空,则让前驱节点指向后继节点
|
//如果前驱节点不为空,则让前驱节点指向后继节点
|
||||||
b.after = a;
|
b.after = a;
|
||||||
|
|
||||||
//如果后继节点不为空,则让后继节点指向前驱节点
|
//如果后继节点不为空,则让后继节点指向前驱节点
|
||||||
@ -372,10 +372,10 @@ void afterNodeRemoval(Node<K,V> e) { // unlink
|
|||||||
|
|
||||||
从源码可以看出, `afterNodeRemoval` 方法的整体操作就是让当前节点 p 和前驱节点、后继节点断开联系,等待 gc 回收,整体步骤为:
|
从源码可以看出, `afterNodeRemoval` 方法的整体操作就是让当前节点 p 和前驱节点、后继节点断开联系,等待 gc 回收,整体步骤为:
|
||||||
|
|
||||||
1. 获取当前节点 p、以及 e 的前驱节点 b 和后继节点 a。
|
1. 获取当前节点 p、以及 p 的前驱节点 b 和后继节点 a。
|
||||||
2. 让当前节点 p 和其前驱、后继节点断开联系。
|
2. 让当前节点 p 和其前驱、后继节点断开联系。
|
||||||
3. 尝试让前驱节点 b 指向后继节点 a,若 b 为空则说明当前节点 p 在链表首部,我们直接将 head 指向后继节点 a 即可。
|
3. 尝试让前驱节点 b 指向后继节点 a,若 b 为空则说明当前节点 p 在链表首部,我们直接将 head 指向后继节点 a 即可。
|
||||||
4. 尝试让后继节点 a 指向前驱节点 b,若 a 为空则说明当前节点 p 在链表末端,所以直接让 tail 指针指向前驱节点 a 即可。
|
4. 尝试让后继节点 a 指向前驱节点 b,若 a 为空则说明当前节点 p 在链表末端,所以直接让 tail 指针指向前驱节点 b 即可。
|
||||||
|
|
||||||
可以结合这张图理解,展示了 key 为 13 的元素被删除,也就是从链表中移除了这个元素。
|
可以结合这张图理解,展示了 key 为 13 的元素被删除,也就是从链表中移除了这个元素。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user