Встречается на 2% собеседований по Java
Какие проблемы могут возникнуть в HashMap, если переопределить hashCode, но не переопределять equals
Если переопределить hashCode(), но не переопределить equals(), могут возникнуть следующие проблемы:
- Нарушение контракта: Согласно контракту
Object, если два объекта равны поequals(), они должны иметь одинаковыйhashCode(). Обратное не обязательно. Непереопределенныйequals()будет сравнивать ссылки, что может привести к логическим ошибкам.
- Потеря данных: В
HashMapобъекты с одинаковым хеш-кодом, но разными поequals(), будут помещены в одну корзину (bucket). Но при поиске по ключуHashMapсначала ищет по хеш-коду, а затем сравнивает черезequals().
Пример:
java
class Key {
int id;
@Override
public int hashCode() { return id; }
// equals() не переопределен
}
Key k1 = new Key(); k1.id = 1;
Key k2 = new Key(); k2.id = 1;
Map<Key, String> map = new HashMap<>();
map.put(k1, "Value");
map.get(k2); // вернет null, т.к. k1 != k2 по equals()
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы