Встречается на 2% собеседований по Java

Какой контракт при добавлении элемента в HashMap

При добавлении элемента в HashMap используется ключ для вычисления хеш-кода (через hashCode()), который определяет индекс корзины (bucket). Если хеш-коды ключей совпадают, вызывается equals() для проверки эквивалентности. Если ключ уже существует, значение перезаписывается. Если нет — элемент добавляется в корзину (или цепочку/дерево при коллизиях).

Пример:

java
Map<String, Integer> map = new HashMap<>();
map.put("key", 1);  // Добавляет пару ("key", 1)
map.put("key", 2);  // Перезаписывает значение на 2

Контракт:

  1. hashCode() должен быть консистентным: для одного объекта всегда возвращает одно значение.
  2. Если a.equals(b) == true, то a.hashCode() == b.hashCode(). Обратное не обязательно.
  3. При коллизиях HashMap использует связный список (до Java 8) или сбалансированное дерево (если корзина переполнена).

Нарушение контракта hashCode()/equals() приведет к некорректной работе HashMap.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы