HashMap通過哈希算法得出哈希值之后,將鍵值對放入哪個索引的方法
static int indexFor(int h, int length) {
// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
return h & (length-1);
}
假設
HashMap的容量為16轉化成二進制為10000,length-1得出的二進制為01111
哈希值為1111
可以得出索引的位置為15
假設
HashMap的容量為15轉化成二進制為1111,length-1得出的二進制為1110
哈希值為1111和1110
那么兩個索引的位置都是14,就會造成分布不均勻了,增加了碰撞的幾率,減慢了查詢的效率,造成空間的浪費。
總結:
- 因為2的冪-1都是11111結尾的,所以碰撞幾率小。