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