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