我正想通過Java的HashMap的源代碼,當我看到下面爲什麼HashMap要求初始容量是2的冪次?
//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;
我的問題是,爲什麼擺在首位不存在這個要求?我也看到,它允許使用自定義能力創建一個HashMap構造函數將其轉換成二的冪:
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
爲什麼總是有能力爲二的冪?
此外,當執行自動重新刷新時,到底發生了什麼?哈希函數是否也改變了?
正是我在找什麼,謝謝。 還有一個疑問,爲什麼Entry表暫時存在,即使它保留了所有數據? – Sushant
@Sushant:表中的數據*在writeObject中顯式*序列化(這樣所有的空條目都不會被寫出)。使字段瞬態停止來自*也*的正常序列化代碼,將其寫入'defaultWriteObject'的調用中。 –
@JonSkeet h&(長度-1)如何處理底片?可以說長度= 16和h = -7 – Geek