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

Я просматривал исходный код 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;

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

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

41
задан T.J. Crowder 13 June 2014 в 08:17
поделиться