Sobes.tech
Senior
69

Soru 3. HashCode hesaplamak için kullanılan anahtar nesne alanı, ekledikten sonra değiştirildiğinde ne yanlış olabilir? - Anahtar ile arama yanlış nesne döndürür - Anahtar ile arama yavaşlar - Anahtar ile arama nesne döndürmez

Sorulan şirketler
RT Labs

AI'dan gelen yanıt

sobes.tech yapay zeka

Если поле объекта, используемое для вычисления hashCode, изменится после вставки объекта в HashMap, то поиск по этому ключу не вернёт объект. Это происходит потому, что HashMap использует hashCode для определения бакета, где хранится объект. При изменении поля hashCode изменится, и при поиске объект будет искаться в другом бакете, где его нет.

Таким образом, правильный ответ:

  • Поиск по ключу не вернет объект

Пример:

class Key {
    int id;
    
    Key(int id) { this.id = id; }

    @Override
    public int hashCode() {
        return id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Key)) return false;
        return id == ((Key) o).id;
    }
}

Key key = new Key(1);
Map<Key, String> map = new HashMap<>();
map.put(key, "value");

// Изменяем поле, влияющее на hashCode
key.id = 2;

// Поиск по ключу не сработает
System.out.println(map.get(key)); // null

Это одна из причин, почему объекты, используемые в качестве ключей в HashMap, должны быть неизменяемыми.