Встречается на 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"); // попадет в другую корзину

Результат: в мапе окажутся оба значения, что приведет к логическим ошибкам. Так делать нельзя!

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

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

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

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