爲什麼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結尾的,所以碰撞機率小。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章