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