HashMap數組的長度為什么是16


HashMap中數組的初始長度為16,當出現hash沖突時HashMap利用鏈表來解決這個問題.當鏈表長度超過8時,並且桶容量大於等於64時鏈表轉為紅黑樹,否則優先擴容.

 

 

 

 

 

 

 其中的哈希函數決定了整個HashMap的效率,而決定整個HashMap效率的哈希函數采用的是位運算方式.

HashMap中的元素超過長度的百分之75時觸發數組擴容.擴大為原來的兩倍,擴容非常消耗性能.數組的初始化長度最好為2的冪.

回到標題,

假設張三手寫了個HashMap,數組長度為10,前面提到哈希函數采用的是位運算的方式.hash算法的hash計算結果往往取決於HashCode值的最后幾位

第一個數計算Hash值

 

 

 第二個數計算Hash值

 

 

  第三個數計算Hash值

 

 

 雖然HashCode的倒數第二第三位從0變成了1,但是運算的結果都是1001。當HashMap長度為10的時候,有些index結果的出現幾率會更大,而有些index結果永遠不會出現(比如0111)

而長度為2的冪時,Length-1的值是所有二進制位全為1,這種情況下,index的結果完全取決於HashCode后幾位的值。只要輸入的HashCode本身分布均勻,Hash算法的結果就是均勻的。


免責聲明!

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



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