Sobes.tech
Middle+
68

Правите get по ключ в HashMap, но елементът не се намира, въпреки че сте сигурни, че тази двойка е била добавена. Как може да се случи това?

Компаниите бяха попитани
луция

Отговор от AI

sobes.tech AI

Такое может произойти, если переопределены методы hashCode() и equals() в ключах, но сделано это неправильно. Например, если hashCode() возвращает разные значения для одного и того же объекта при разных вызовах, или equals() не соответствует контракту, то HashMap не сможет найти элемент.

Другие причины:

  • Ключ был изменён после вставки (мутабельный объект в качестве ключа).
  • Используется другой объект с теми же данными, но без корректного переопределения equals и hashCode.

Пример неправильного ключа:

class Key {
    int id;
    @Override
    public int hashCode() {
        return new Random().nextInt(); // Неправильно!
    }
    @Override
    public boolean equals(Object o) {
        // ...
    }
}

Из-за этого поиск по ключу не сработает.