Встречается на 2% собеседований по Java
Что будет происходить при вставке в HashMap двух одинаковых элементов по equals с разным значением hashCode
При вставке в HashMap двух объектов, которые равны по equals() но имеют разные hashCode(), возникнет коллизия. HashMap будет рассматривать их как разные объекты и поместит в разные бакеты (корзины) из-за разного хеш-кода. Это нарушает контракт equals/hashCode, который требует, чтобы равные объекты имели одинаковый хеш-код.
Пример:
java
class BadKey {
int id;
@Override
public boolean equals(Object o) {
if (this == o) return true;
return o instanceof BadKey && this.id == ((BadKey)o).id;
}
// Намеренно нарушаем контракт
@Override
public int hashCode() {
return id % 2; // разные хеши для одинаковых объектов
}
}
Map<BadKey, String> map = new HashMap<>();
map.put(new BadKey(1), "First");
map.put(new BadKey(1), "Second"); // попадет в другую корзинуРезультат: в мапе окажутся оба значения, что приведет к логическим ошибкам. Так делать нельзя!

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы