Hashmap的長度為什麼必須是2的n次方

2021-10-25 20:02:56 字數 424 閱讀 5424

從原始碼中我們可以看到獲取 key 所對應 node 陣列下標的方法是(length - 1) & hash,它與我們要求的hash % lengthlength 是 2 的 n 次方的條件下是等價的,而用這種 & 的位運算的方法相比直接用取餘符號進行運算,效能更好。

但是要明確一點,初始化時設定的長度不符合 2 的 n 次方也能正常初始化成功。

//可以看出原始碼中獲取下標的方法是(n - 1) & hash,n對應陣列長度

elseif(

(e = tab[index =

(n -1)

& hash]

)!= null)

hashmap知識點總結(附原始碼分析鏈結)

HashMap的長度為什麼要是2的n次方

hashmap訪問時,都需要計算當前key應該對應entry陣列哪個元素,即計算陣列下標 演算法如下 returns index for hash code h.staticintindexfor inth,intlength returnh length 1 hashmap為了訪問高效,要盡量較少...

HashMap 的長度為什麼是2的冪次方

為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。我們上面也講到了過了,hash 值的範圍值 2147483648到2147483647,前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣列,記憶體是放不下...

HashMap的長度為什麼要是2的N次方

先貼一段原始碼壓壓驚,the default initial capacity must be a power of two.static final int default initial capacity 1 4 aka 16見上面的原始碼中的注釋,must be a power of two ...