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 )中,下标是原始下标加上旧数组的长度