Почему HashMap требует, чтобы начальная емкость была степенью двойки?

Я просматривал исходный код HashMap на Java, когда увидел следующее

//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;

Мой вопрос: почему это требование существует в первую очередь? Я также вижу, что конструктор, который позволяет создавать HashMap с пользовательской емкостью, преобразует его в степень двух:

int capacity = 1;
while (capacity < initialCapacity)
  capacity <<= 1;

Почему емкость всегда должна быть степенью двойки?

Кроме того, когда происходит автоматическая перефразировка, что именно происходит? Изменена ли хэш-функция?

Ответы на вопрос(2)

Ваш ответ на вопрос