我們都知道hashmap進行hash雜湊的演算法是hash&(length-1),而hash的容量建議都是取2的n次方首先我們先說說這個演算法,演算法的目的是為了得到小於length的更加均勻的數,如果不均勻容易產生hash碰撞,換句話說只有全是1,進行按位與才是最均勻的,因為1與上任何數都等於任何數本身
為什麼是length-1不是length了
16是10000 15是01111。16與任何數只能是0或者16。15與任何數等於小於16的任何數本身。
為什麼容量是2的n次方呢
2的n次方一定是最高位1其它低位是0,
這樣減1的時候才能得到01111這樣都是1的二進位制。
HashMap為什麼是初始容量是16
為了讓大家一眼明白。index hashcode key length 1 如何進行位運算呢?有如下的公式 length是hashmap的長度 index hashcode key length 1 下面我們以值為 book 的key來演示整個過程 1.計算book的hashcode,結果為十進位制...
HashMap初始容量為什麼是16
這裡不講 只講思路。要稍微懂點二進位制。hashmap的結構是陣列加鍊表,容量指的是陣列長度。元素放入陣列的哪個位置?這由算出來的hashcode 跟 1111 作與運算 得出陣列下標。hashcode具體演算法我也不知道 為什麼是1111,因為0000 1111共16個數,跟陣列下標 容量都一致。...
Hashmap的容量為什麼是2的冪次
做為面試常考的問題之一,每次都答的模模糊糊,有必要了解一下,首先來看一下hashmap的put方法的原始碼 public v put k key,v value modcount addentry hash,key,value,i 增加乙個新的entry到table i return null 如果...