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方法的理解的主要内容,如果未能解决你的问题,请参考以下文章