为什么哈希表 11 的初始容量是 11,而哈希映射中的DEFAULT_INITIAL_CAPACITY是 16,需要 2 的幂?
比较JDK 1.6中的和源代码,我在HashMap中看到了下面的代码:HashMap
Hashtable
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 16;
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
但是,在Hashtable中,我看到了这个:
table = new Entry[initialCapacity];
public Hashtable() {
this(11, 0.75f);
}
所以我的问题是:为什么HashMap需要2的幂作为初始容量,而Hashtable选择11作为默认的初始容量?我认为这与 Hashtable 是线程安全的,不允许空键或值无关。