junior
Какова роль equals() и hashCode() в HashMap
hashCode() определяет корзину, в которую попадет элемент, а equals() — сравнивает ключи внутри корзины для нахождения конкретного элемента.
Алгоритм поиска:
- Вычисляется
hashCode()искомого ключа. - По hashCode определяется индекс корзины (
hash & (capacity - 1)). - В корзине перебираются элементы, для каждого вызывается
equals()с искомым ключом. - Первый элемент, для которого
equals()вернул true, считается найденным.
Контракт: если a.equals(b) == true, то a.hashCode() == b.hashCode(). Обратное не обязательно: объекты с одинаковым hashCode могут быть не equals (коллизия). Нарушение этого контракта приведет к тому, что HashMap не сможет найти элемент, даже если он есть в таблице.
На собеседовании: объясните роль каждого метода: hashCode — находит корзину, equals — находит элемент в корзине. Обязательно сформулируйте контракт hashCode/equals.