Встречается на 2% собеседований по Java

Что произойдет при использовании mutable объекта в качестве ключа и изменении его состояния

Использование mutable-объекта в качестве ключа HashMap или HashSet может привести к потере данных и некорректной работе коллекции. При изменении состояния объекта меняется его hashCode(), но коллекция продолжает хранить его в старом бакете, основанном на изначальном хэш-коде. В результате объект становится недостижимым через get(), хотя физически присутствует в мапе.

Пример:

java
Map<MutableKey, String> map = new HashMap<>();
MutableKey key = new MutableKey("initial");
map.put(key, "value");

key.setValue("changed");  // Изменяем состояние ключа
System.out.println(map.get(key));  // Выведет null

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

  1. Используйте только immutable-объекты в качестве ключей (String, Integer и т.д.)
  2. Если mutable-ключ необходим, убедитесь, что его состояние не меняется после добавления в коллекцию
  3. Переопределяйте equals() и hashCode() так, чтобы они зависели только от неизменяемых полей
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы