1. 程式人生 > >為什麼hashMap的容量是2的冪次

為什麼hashMap的容量是2的冪次

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,就會造成分佈不均勻了,增加了碰撞的機率,減慢了查詢的效率,造成空間的浪費。
總結:

  1. 因為2的冪-1都是11111結尾的,所以碰撞機率小。