為什么hashmap以2的倍數作為桶的長度,同時以2作為擴容倍數


 

1 h%n==h&(n-1) 增加運算速度

2 使hash分布更均勻

HashMap源碼解析筆記

3 擴容時僅需要多比較1個bit:

 if ((e.hash & oldCap) == 0) { 重點

newTab[j + oldCap] = hiHead;重點

 jdk1.7 1.8 hash map 區別及一些細節

4 擴容遷移時,僅有一半的數據要遷移,減少遷移成本

這與分表中使用2的倍數是一個道理,比如最初32張,80001在表1,擴容64張,還在表1,如果33張,在表9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM