Middle+
Você faz um get por chave em um HashMap, mas o elemento não é encontrado, embora saiba com certeza que esse par foi inserido. Como isso pode acontecer?
sobes.tech IA
Resposta da IA
Такое может произойти, если переопределены методы 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) {
// ...
}
}
Из-за этого поиск по ключу не сработает.