Java集合框架_ HashMap 的長度為什么是2的冪次方


為了能讓HashMap存取高效,盡量減少碰撞,也就是要盡量把數據分配均勻,Hash值的范圍是-2147483648到2147483647,前后加起來有40億的映射空間,只要哈希函數映射的比較均勻松散,一般應用是很難出現碰撞的,但一個問題是40億的數組內存是放不下的。所以這個散列值是不能直接拿來用的。用之前需要先對數組長度取模運算,得到余數才能用來存放位置也就是對應的數組小標。這個數組下標的計算方法是(n-1)&hash,n代表數組長度

這個算法應該如何設計呢?

我們首先可能會想到采用%取余的操作來實現。但是,重點來了。

取余操作中如果除數是2的冪次則等價於其除數減一的與操作,也就是說hash%length=hash&(length-1),但前提是length是2的n次方,並且采用&運算比%運算效率高,這也就解釋了HashMap的長度為什么是2的冪次方。


免責聲明!

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



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