为什么Hashtable的初始容量是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16,并且需要2的幂次方?
- 论坛
- 为什么Hashtable的初始容量是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16,并且需要2的幂次方?
11 浏览
为什么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是线程安全的、不允许空键或空值无关。