Senior
65
3-savol. HashCode hisoblash uchun ishlatiladigan kalit ob'ektining maydoni o'zgartirilganda nima noto'g'ri bo'lishi mumkin? - Kalit bo'yicha qidiruv to'g'ri ob'ektni qaytarmaydi - Kalit bo'yicha qidiruv sekinlashadi - Kalit bo'yicha qidiruv hech qanday ob'ektni qaytarmaydi
Qaerda so'ralgan kompaniyalar
RT Labs
AIdan javob
sobes.tech AI
Если поле объекта, используемое для вычисления 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, должны быть неизменяемыми.