Встречается на собеседованиях • сегодня
Что произойдет при создании класса, используемого в качестве ключа, с неравными equals и нереализованными hashCode
Если класс используется как ключ в HashMap или HashSet без корректной реализации hashCode(), но с переопределенным equals(), это приведет к нарушению контракта Object.hashCode(). Основное правило: если equals() возвращает true, hashCode() должен возвращать одинаковые значения.
Без hashCode() объекты с одинаковыми полями (по equals()) могут попасть в разные корзины (buckets), что вызовет дублирование ключей и потерю данных.
Пример:
java
class BadKey {
String id;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BadKey badKey = (BadKey) o;
return Objects.equals(id, badKey.id);
}
// hashCode() не реализован!
}
BadKey key1 = new BadKey("a");
BadKey key2 = new BadKey("a");
Map<BadKey, String> map = new HashMap<>();
map.put(key1, "value1");
map.put(key2, "value2"); // Оба ключа могут быть добавлены, хотя equals() trueРезультат: map.size() может быть 2, хотя ожидается 1.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы