Я анализирую исходный код HashMap
в jdk7 , и я обнаружил, что когда мы вызываем put()
метод для добавления элементов, он будет использовать indexFor()
для рассчитать индекс и сохранить элемент в массиве, метод указан ниже:
Теперь мне интересно, почему он использует h & (length-1)
для получения индекса? Используется ли для получения большего индекса случайного массива? Можем ли мы использовать length
или length-2
(если существует) вместо этого?
Может кто-нибудь помочь мне понять это? Заранее спасибо!
static int indexFor(int h, int length) {
// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
return h & (length-1);
}