首页 > 编程知识 正文

hashmap的resize解析,hashmap的resize方法

时间:2023-05-03 18:08:10 阅读:186008 作者:1484

if((e.hasholdcap )==0) ) ) ) ) ) ) )。

如果返回true (e.hash (old cap-1 ) )和(e.hash (newcap-1 ) ) )的结果相同

因为Map的容量需要平方扩展为2倍,所以oldCap和newCap是平方。

另外,newCap是oldCap的2倍,相当于oldCap唯一二进制的1移动到了上位1位(16 1 )。

缺省容量为16,相当于e.hash0x1111(oldcap-1=15 )。

现在,容量增加了两倍的是32,rehash定位是e.hash0x11111(newcap-1=31 )

序列每次扩展都会增加一倍。 因此,新数组中每个元素的位置要么是原始索引,要么是索引=索引old cap

排列长度: 2,key:3

0 0 0 1

0 0 1 1

结果为0 0 0 1=1,所以数组下标为1;

扩增后,序列长度: 4,key:3

0 0 1 1

0 0 1 1

结果为0 0 1 1=3=原始索引old cap=12

也就是说,在要素位于新数组的下标时,检测要素的散列值和oldCap操作的结果是否为0即可

0,那么下标还是原来的下标;

1 )中,下标是原始下标加上旧数组的长度

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。