HashMap.resize()
链表扩容图解
Q1:如何理解扩容时(e.hash & oldCap) == 0?
Q2:如何理解扩容时newTab[j + oldCap]?
设:HashMap.table = table[4]
table[1]=X1->X2->X3->X4
1=X1.hash&(4-1)=X2.hash&(4-1)...
4-1=3->0011
若X.hash&0011 = 0001
即X.hash=TT01(TT:0或者1)
X.hash&(oldCap=4)=0
= TT01&0100
if=0
TT01->T001
else
TT01->T101
现在开始扩容了。4<<1 =8
寻下标算法:T.hash&(8-1)=TT01&0111
情况1 TT01=T001
T001
&0111=0001即数组下标为1,说明hash为 T001的元素都落在table[1]上
情况2 TT01=T101
T101
& 0111=0101即数组下标为5,说明hash为 T101的元素都落在table[5]上
即: newTab[j + oldCap]。