Сравнивая исходный код HashMap
и Hashtable
в JDK 1.6, я увидел следующий код внутри HashMap:
/**
* 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 является поточно-ориентированным и не допускает нулевого ключа или значений.