1. 程式人生 > >HashMap的容量為什麼一定要是2的冪呢?

HashMap的容量為什麼一定要是2的冪呢?

HashMap中的資料結構是陣列+單鏈表的組合,我們希望的是元素存放的更均勻,最理想的效果是,Entry陣列中每個位置都只有一個元素,這樣,查詢的時候效率最高,不需要遍歷單鏈表,也不需要通過equals去比較K,而且空間利用率最大。那如何計算才會分佈最均勻呢?我們首先想到的就是%運算,雜湊值%容量=bucketIndex

原始碼中是怎麼做的呢?

static int indexFor(int h,int length){

//這裡的h為key呼叫hashCode方法計算出來的hash值,length為目前的容量

return h&(length-1);

}

當容量是2的冪次方時,h&(length-1)==h%length

那麼初始容量為什麼是16,以及載入因子為什麼是0.75呢?

預設載入因子 (0.75) 在時間和空間成本上尋求一種折衷。載入因子過高雖然減少了空間開銷,但同時也增加了查詢成本..在設定初始容量時應該考慮到對映中所需的條目數及其載入因子,以便最大限度地降低 rehash 操作次數。