HashMap resize方法的理解

Posted woniu4

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap resize方法的理解相关的知识,希望对你有一定的参考价值。

对于oldTable中存储的为15、7、4、5、8、1,长度为8的一个数组中,存储位置如下

0

1

2

3

4

5

6

7

8

1

 

 

4

5

 

15

7

 

 

 

 

 

 

 

当扩容到一倍后,对于新的位置的选择通过e.hash & oldCap 确认其在新的数组中的位置,

如:

8:1000 与原来长度8:1000相与后,为1,则在新的数组中的位置,为原位置加上原数组长度即可。避免了重新计算数组位置。

对于7:111与原长度8:1000相与后,为0,表示其在新数组中的位置是不变的,仍在在7的位置上。

在求新数组的位置时,其仅是最高位上增加了1而已,与原数组长度最高位是一致的,忽略低位信息,可以直接判断出其在原数组中是否已经超过了本身的长度,形成了数据链。

最后在新的空间中存储如下:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 

1

 

 

4

5

 

7

8

 

 

 

 

 

 

15

以上是关于HashMap resize方法的理解的主要内容,如果未能解决你的问题,请参考以下文章

HashMap 和 ConcurrentHashMap,Java1.8版本

Java 集合深入理解 :HashMap之扩容 数据迁移

HashMap源码解析之resize方法

[JavaSE 源码分析] 关于HashMap的个人理解

源码分析——HashMap的put,resize,containskey方法原理分析

源码分析——HashMap的put,resize,containskey方法原理分析