hashmap的hash方法為什么需要讓高16位參與異或運算的原因


原因:當數組的長度很短時,只有低位數的hashcode值能參與運算。而讓高16位參與運算可以更好的均勻散列,減少碰撞,進一步降低hash沖突的幾率。並且使得高16位和低16位的信息都被保留了。

而在這里采用異或運算而不采用& ,| 運算的原因是 異或運算能更好的保留各部分的特征,如果采用&運算計算出來的值的二進制會向1靠攏,采用|運算計算出來的值的二進制會向0靠攏


然后有不少博客提到了因為int是4個字節,所以右移16位。我打開hashmap的源碼,找到hash方法,按住ctrl點擊方法里的hashcode,跳轉到Object類,發現hashcode的數據類型是int。int為4個字節,1個字節8個比特位,就是32個比特位,所以16很可能是因為32對半的結果,也就是讓高的那一半也來參與運算所以選擇了16。

復習過程記錄一下

參考博客:

https://blog.csdn.net/weixin_43842753/article/details/105927912


免責聲明!

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



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