hashmap扩容时的链表拆分
时间: 2023-09-15 19:18:09 浏览: 152
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导.docx
在HashMap扩容时,链表的拆分是指将原来的链表根据元素的哈希值进行拆分,并重新分配到新的扩容后的数组中的位置上。
具体来说,当HashMap需要扩容时,它会创建一个新的更大的数组,并将原来的元素重新分配到新的数组中。在这个过程中,原来的链表会被拆分成两个链表:一个是哈希值与原数组容量按位与结果为零的元素组成的低位链表,另一个是哈希值与原数组容量按位与结果不为零的元素组成的高位链表。
拆分的过程是通过遍历原来的链表,判断每个元素的哈希值与原数组容量按位与的结果来进行的。如果结果为零,则将元素放入低位链表中;如果结果不为零,则将元素放入高位链表中。最后,在遍历完成后,将低位链表和高位链表分别放回新的数组中的对应位置。
总结起来,HashMap在扩容时通过对元素的哈希值与原数组容量按位与的结果进行判断,将原来的链表拆分成低位链表和高位链表,并将它们分别放入新的数组中的合适位置。这样可以有效地避免在扩容后出现太多的冲突,提高HashMap的性能和效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [JavaSourceCodeAnalysis:JDK二进制阅读笔记,包括Java常用集合类和Java常用和发工具(同步工具,线程安全...](https://download.csdn.net/download/weixin_42138525/16089759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [jdk1.8HashMap扩容后链表拆分过程解析](https://blog.csdn.net/leisure_life/article/details/123445508)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文