Sobes.tech
Middle+
66

Robisz get po kluczu w HashMap, ale element nie jest znajdowany, mimo że na pewno wiesz, że ta para została dodana. Jak to może się zdarzyć?

Firmy, w których zadano pytania
луция

Odpowiedź od 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) {
        // ...
    }
}

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