Для ключа хеш-коллекции должны оставаться стабильными поля, участвующие в равенстве и вычислении хеша. Полная неизменяемость удобна, но строго необходима именно неизменность этих признаков.
Почему тип ключа должен быть иммутабельным и какие проблемы возникнут, если изменить ключ после добавления в хеш-коллекцию?
Для ключа хеш-коллекции должны оставаться стабильными поля, участвующие в равенстве и вычислении хеша. Полная неизменяемость удобна, но строго необходима именно неизменность этих признаков.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для ключа хеш-коллекции должны оставаться стабильными поля, участвующие в равенстве и вычислении хеша. Полная неизменяемость удобна, но строго необходима именно неизменность этих признаков.
После добавления ключ размещён в бакете по старому хешу. Если изменить значимые поля, последующий поиск вычислит другой хеш и может не найти запись, хотя объект физически остаётся в коллекции. Удаление по ключу тоже может не сработать.
Безопасный вариант — неизменяемый ключ. Если изменение необходимо, сначала удаляют запись по старому состоянию и затем добавляют новое. Поля, не участвующие в сравнении и хеше, могут изменяться, если это не нарушает другие инварианты.