一:加快雜湊計算;二:減少雜湊衝突
雜湊表索引位置的計算hash(key) % 陣列長度;當陣列長度為2的n次方;這個公式等價於hash(key) & (length - 1);計算機底層就是0和1兩個位的操作,顯然&的速度會比%快;
為什麼減少雜湊衝突?看hash(key) & (length - 1);如果length為奇數,length - 1就為偶數,偶數最低位二進位制是0;0和hash(key)的最低位做&操作只會是0;如果length為偶數,length - 1就為奇數,奇數最低位二進位制是1;1和hash(key)的最低位做&操作是0或者1,多了一種可能。
HashMap 的長度為什麼是2的冪次方
為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。我們上面也講到了過了,hash 值的範圍值 2147483648到2147483647,前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣列,記憶體是放不下...
HashMap 的長度為什麼是2的冪次方
為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。hash 值的範圍值設定為 2147483648 2的31次方 到2147483647 2的31次方減一 前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣...
HashMap 的長度為什麼是2的冪次方
為了能讓 hashmap 訪問高效,盡量較少碰撞,也就是要盡量把資料分配均勻。hash 值的範圍值 2147483648到2147483647,前後加起來大概40億的對映空間,只要雜湊函式對映得比較均勻鬆散,一般應用是很難出現碰撞的。但問題是乙個40億長度的陣列,記憶體是放不下的。所以這個雜湊值是不...