HashMap的resize()方法不过以下三个问题
为什么要扩容?
何时扩容?
怎样扩容?

第一个问题:为什么要扩容?
这个问题答案可深可浅
散列表在不断的经过put()方法添加元素时 当指定长度的散列表达到扩容阈值 就要进行扩容的操作 如果不扩容 那么无法再往集合中添加元素 同时数据量达到一定程度还不扩容也会让HashMap的时间复杂的从O(1)-->O(n) 而扩容之后会让时间复杂度从O(n)-->O(logn)
所以说扩容是很有必要的 但是扩容同时也带来两个问题 何时扩容? 怎样扩容?
这两个问题进入代码来解析
一样的 看源码之前先看常量有哪些



以下是resize的核心代码



@SuppressWarnings({"rawtypes,"unchecked""})这个注解的作用是屏蔽一些无关紧要的警告


以下这部分代码主要做的是链表上的数据移植–重新计算桶位位置


图解一哈


本文深入探讨了HashMap的扩容机制,解释了为什么需要扩容、何时进行扩容以及如何进行扩容。扩容可以避免时间复杂度从O(1)恶化到O(n),确保在数据量增加时仍能保持高效的数据操作。
3672

被折叠的 条评论
为什么被折叠?



