Почему initialCapacity для Hashtable 11, а DEFAULT_INITIAL_CAPACITY в HashMap - 16 и требует степени 2?

Сравнивая исходный код 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 является поточно-ориентированным и не допускает нулевого ключа или значений.

30
задан Boann 20 March 2019 в 13:41
поделиться