Skip to content

Commit 6559cec

Browse files
authoredAug 2, 2023
Merge pull request Snailclimb#2108 from JacketFu/main
update linkedhashmap-source-code.md
2 parents 6f17dab + 045cef8 commit 6559cec

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed
 

‎docs/java/collection/linkedhashmap-source-code.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ LRUCache < Integer, String > cache = new LRUCache < > (2);
118118
cache.put(1, "one");
119119
cache.put(2, "two");
120120
cache.put(3, "three");
121+
cache.put(4, "four");
121122
for (int i = 0; i < 4; i++) {
122123
System.out.println(cache.get(i));
123124
}
@@ -129,6 +130,7 @@ for (int i = 0; i < 4; i++) {
129130
null
130131
null
131132
three
133+
four
132134
```
133135

134136
从输出结果来看,由于缓存容量为 2 ,因此,添加第 3 个元素时,第 1 个元素会被删除。添加第 4 个元素时,第 2 个元素会被删除。
@@ -139,7 +141,7 @@ three
139141

140142
在正式讨论 `LinkedHashMap` 前,我们先来聊聊 `LinkedHashMap` 节点 `Entry` 的设计,我们都知道 `HashMap` 的 bucket 上的因为冲突转为链表的节点会在符合以下两个条件时会将链表转为红黑树:
141143

142-
1. 链表上的节点个数达到树化的阈值-1,即`TREEIFY_THRESHOLD - 1`
144+
1. 链表上的节点个数达到树化的阈值7,即`TREEIFY_THRESHOLD - 1`
143145
2. bucket 的容量达到最小的树化容量即`MIN_TREEIFY_CAPACITY`
144146

145147
`LinkedHashMap` 是在 `HashMap` 的基础上为 bucket 上的每一个节点建立一条双向链表,这就使得转为红黑树的树节点也需要具备双向链表节点的特性,即每一个树节点都需要拥有两个引用存储前驱节点和后继节点的地址,所以对于树节点类 `TreeNode` 的设计就是一个比较棘手的问题。

0 commit comments

Comments
 (0)
Please sign in to comment.