Java8.HashMap源码-resize()流程图


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]。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM