Skip to content

Commit 25b0693

Browse files
committed
add code
1 parent 2c82ae7 commit 25b0693

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

docs/HashMap.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,29 @@ final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
182182

183183
如果f是TreeBin类型,那么说明当前数组下标存储的是一个红黑树,f是红黑树的根节点,调用putTreeVal方法,插入或更新节点。
184184

185-
插入完成后,判断binCount(数组下标存储是一个链表时,binCount是链表长度),当binCount超过8时,那么调用treeifyBin方法将链表转换为红黑树。最后break出for循环。
186185

186+
如果f是TreeBin类型,那么说明当前数组下标存储的是一个红黑树,f是红黑树的根节点,调用putTreeVal方法,插入或更新节点。
187+
188+
189+
190+
* 插入完成后,判断binCount(数组下标存储是一个链表时,binCount是链表长度),当binCount超过8时,**并且数组的长度大于64时**,那么调用treeifyBin方法将链表转换为红黑树。最后break出for循环。
191+
192+
### PS:
193+
194+
很多技术文章都是说链表长度大于8就转换为红黑树,我当时也没有注意这个细节,直到有个群里的朋友指正,当原来的链表长度超过8时,确实会调用treeifyBin方法,但是在treeifyBin方法中会判断**当前tab是否为空,或者数组长度是否小于64**,如果满足条件,那么调用resize方法对tab初始化或者扩容,就不会将链表转换为红黑树了。
195+
196+
添加键值对的putVal方法的源码:
197+
198+
![image](../static/12609483-f49199a436960c2b.png)
199+
200+
<figcaption style="box-sizing: border-box; display: block; text-align: center; font-size: 0.8em; line-height: 2em; color: rgb(144, 144, 144);"></figcaption>
201+
202+
treeifyBin方法的源码: MIN_TREEIFY_CAPACITY是64
203+
204+
![image](../static/12609483-31cdd1cc821d9c8d.png)
205+
206+
207+
187208

188209
#### 4.判断是否需要扩容
189210

122 KB
Loading
82.2 KB
Loading

0 commit comments

Comments
 (0)