В каждой статье о столкновении хэшей HashMaps есть одна вещь, и мой вопрос вращается вокруг этого.Какой метод .equals() вызывается для разрешения столкновения хэша в HashMaps?
Позвольте мне объяснить, что я понимаю о внутренней работе hashmaps.
Сохранение двух записей (E1, E2) с использованием той же хэш-код map.put (K, V)
1), когда map.put (K, V) называется, HashMap находит хэш-код () ключа 'k'.
2) тогда он использует этот хэш-код, который он нашел в качестве семени для своего внутреннего статического метода хэширования. & получает другое значение хэш-функции.
3) тогда это новое найденное значение хэширования отображается на внутренний индекс ведра.
4) затем в корзину добавляется запись.
В случае столкновения хэшей.
1) то же самое, что и нормальный, когда вызывается map.put (k, v), hashmap находит hashCode() ключа 'k'.
2) снова такой же, как обычно, тогда он использует этот хэш-код, который он нашел в качестве семени для своего внутреннего статического метода хэширования. & получает другое значение хэш-функции.
3) новое найденное хеш-значение отображается на внутренний индекс ведра, теперь есть проблема, так как он уже имеет запись в этом положении ковша.
Разрешение: Поскольку запись на самом деле является простым связанным списком, новый элемент с конфлицированным хешем сохраняется в следующей предыдущей записи.
Извлечение входа e2 с map.get (к)
1) хэш генерируется из ключа & снова статический метод вызывается с использованием хэш-хэш получить из ключа в качестве затравки.
2) обнаружение сопоставленного ведра с использованием значения хеширования, полученного статическим хеш-методом, теперь, если здесь имеется более одной записи метод equals() приходит на помощь.
, который связан с перечнем &, продолжает называть метод equals(), пока не найдет совпадение.
Теперь мой вопрос в том, где это так называется метод equals()?
Я открыл официальную документацию HashMap &, но не переопределяет метод .equals(), , так где это происходит? Или это значение по умолчанию .equals() из класса Object?
Ждать, что? 'HashMap' не вызывает собственный метод equals, это не имеет смысла, он называет объекты равными методу, который вы пытаетесь вставить. – tkausl
@tkausl вы можете объяснить это более подробно? Вы хотите сказать, что значение по умолчанию «==» в классе Object равно() используется для поиска ключа? –