Middle+
51
Děláte get podle klíče v HashMapu, ale prvek není nalezen, i když přesně víte, že tento pár byl vložen. Jak je to možné?
Společnosti byly požádány
луция
Odpověď 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) {
// ...
}
}
Из-за этого поиск по ключу не сработает.