Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: hashmap, mutable key, hashcode, equals, data integrity

Можно ли использовать объект как ключ в HashMap, если у него есть изменяемые поля?

Проверяет понимание контракта hashCode()/equals() и рисков при мутабельных ключах.

Короткий ответ

Нежелательно. Если поля, участвующие в hashCode() или equals(), изменяются после помещения в HashMap, объект «потеряется» в корзинах: поиск по старому хешу не найдёт его в новом состоянии.

Длинный ответ

Контракт HashMap:

  • При добавлении ключа вычисляется hashCode(), выбирается «корзина», затем в ней сравниваются ключи через equals().

Проблема мутации:

  • После изменения полей hashCode() может давать другое значение, и запись окажется в несоответствующей корзине.

  • Дальнейшие вызовы get(key) возвращают null, хотя объект есть.

Пример:

class Person {
  	String name;
  	// hashCode() и equals() основаны на name
}
Map<Person, Integer> map = new HashMap<>();
Person p = new Person("Alice");
map.put(p, 1);
p.setName("Bob");
map.get(p); // null, потому что hashCode изменился

Рекомендации:

  • Использовать для ключей только иммутабельные объекты.

  • Если нужно мутабельное состояние, не включать эти поля в hashCode()/equals().

  • Либо копировать объект перед использованием в качестве ключа.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Java

    Java

Ключевые слова

#hashmap

#mutable key

#hashcode

#equals

#data integrity

Подпишись на Java Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.