Почему 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;
Почему емкость всегда должна быть степенью двойки?
Кроме того, когда происходит автоматическая перефразировка, что именно происходит? Изменена ли хэш-функция?