為什么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結尾的,所以碰撞幾率小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM