為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。hash 值的範圍值-2147483648到2147483647,前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣列,記憶體是放不下的。所以這個雜湊值是不能直接拿來用的。那麼我們採用什麼樣的方式來設計陣列下標呢??
答案是採用%取餘的操作來實現,也就是hash % n(n是陣列的長度),但是此時我們考慮採用二進位制&操作會提公升效率,即我們需要考慮讓hash % n == (n - 1) & hash?當然是n為2的次冪的時候,這也就解釋了 hashmap 的長度為什麼是2的冪次方。
答:這樣就是加大雜湊值低位的隨機性,使得分布更均勻,從而提高對應陣列儲存下標位置的隨機性&均勻性,最終減少hash衝突,兩次就夠了,已經達到了高位低位同時參與運算的目的;
HashMap 的長度為什麼是2的冪次方
為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。我們上面也講到了過了,hash 值的範圍值 2147483648到2147483647,前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣列,記憶體是放不下...
HashMap 的長度為什麼是2的冪次方
為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。hash 值的範圍值設定為 2147483648 2的31次方 到2147483647 2的31次方減一 前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣...
為什麼HashMap的長度是2的整數次冪?
一 加快雜湊計算 二 減少雜湊衝突 雜湊表索引位置的計算hash key 陣列長度 當陣列長度為2的n次方 這個公式等價於hash key length 1 計算機底層就是0和1兩個位的操作,顯然 的速度會比 快 為什麼減少雜湊衝突?看hash key length 1 如果length為奇數,le...