Middle+
59
Դուք անում եք get ըստ բանալիի HashMap-ում, բայց տարրն չի գտնվում, չնայած դուք հաստատ գիտեք, որ այս զույգը տեղադրվել է: Ինչպե՞ս կարող է դա տեղի ունենալ։
Ընկերությունները, որտեղ հարցրել են
луция
Պատասխան 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) {
// ...
}
}
Из-за этого поиск по ключу не сработает.