Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/java/collection/linkedhashmap-source-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ void afterNodeAccess(Node < K, V > e) { // move node to last
if (b == null)
head = a;
else
//如果后继节点不为空,则让前驱节点指向后继节点
//如果前驱节点不为空,则让前驱节点指向后继节点
b.after = a;

//如果后继节点不为空,则让后继节点指向前驱节点
Expand Down Expand Up @@ -372,10 +372,10 @@ void afterNodeRemoval(Node<K,V> e) { // unlink

从源码可以看出, `afterNodeRemoval` 方法的整体操作就是让当前节点 p 和前驱节点、后继节点断开联系,等待 gc 回收,整体步骤为:

1. 获取当前节点 p、以及 e 的前驱节点 b 和后继节点 a。
1. 获取当前节点 p、以及 p 的前驱节点 b 和后继节点 a。
2. 让当前节点 p 和其前驱、后继节点断开联系。
3. 尝试让前驱节点 b 指向后继节点 a,若 b 为空则说明当前节点 p 在链表首部,我们直接将 head 指向后继节点 a 即可。
4. 尝试让后继节点 a 指向前驱节点 b,若 a 为空则说明当前节点 p 在链表末端,所以直接让 tail 指针指向前驱节点 a 即可。
4. 尝试让后继节点 a 指向前驱节点 b,若 a 为空则说明当前节点 p 在链表末端,所以直接让 tail 指针指向前驱节点 b 即可。

可以结合这张图理解,展示了 key 为 13 的元素被删除,也就是从链表中移除了这个元素。

Expand Down