HashMap resize部分解读
if ((e.hash & oldCap) == 0)
resize中有如此判断,意思是
如果e的hash值与老表的容量进行与运算为0,则扩容后的索引位置跟老表的索引位置一样
首先e的hash值与老表的容量进行与运算为0,例如老表容量为16,即10000,则说明e的hash值倒数第5位为0
原来索引位置为hash值的低4位,
扩容后索引位置为hash值的低5位,但是其实都是一样的,因为倒数第5位为0
如果e的hash值与老表的容量进行与运算为非0,则扩容后的索引位置为:老表的索引位置+oldCap
与运算结果非0,例如老表容量16,即10000,则说明e的hash只倒数第5位为1
原来索引位置为hash值的低四位,记为XXXX,
扩容后索引位置为hash值的低5位,即1XXXX,现在的索引位置是老的索引位置+16