比思論壇
標題:
HashMap的扩容操作是怎么实现的?
[打印本頁]
作者:
642377962
時間:
2021-12-7 10:24
標題:
HashMap的扩容操作是怎么实现的?
在jdk1.8中,resize方法是在hashmap中的键值对大于阀值时或者初始化时,就调用resize方法进行扩容;
每次扩展的时候,都是扩展2倍;
扩展后Node对象的位置要么在原位置,要么移动到原偏移量两倍的位置。
在putVal()中,我们看到在这个函数里面使用到了2次resize()方法,resize()方法表示的在进行第一次初始化时会对其进行扩容,或者当该数组的实际大小大于其临界值值(第一次为12),这个时候在扩容的同时也会伴随的桶上面的元素进行重新分发,这也是JDK1.8版本的一个优化的地方,在1.7中,扩容之后需要重新去计算其Hash值,根据Hash值对其进行分发,但在1.8版本中,则是根据在同一个桶的位置中进行判断(e.hash & oldCap)是否为0,重新进行hash分配后,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上
作者:
zaiyunduan2912
時間:
2022-2-12 16:54
有大牛在
作者:
jf222
時間:
2022-2-20 19:28
提示:
作者被禁止或刪除 內容自動屏蔽
歡迎光臨 比思論壇 (http://108.170.10.234/)
Powered by Discuz! X2.5