为什么Hashtable的初始容量是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16,并且需要2的幂次方?

11 浏览
0 Comments

为什么Hashtable的初始容量是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16,并且需要2的幂次方?

在JDK 1.6的源代码中比较HashMap和Hashtable,我在HashMap中看到下面的代码:

/**

* 默认初始容量 - 必须是2的幂。

*/

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是线程安全的、不允许空键或空值无关。

0