Встречается на 2% собеседований по Java
Когда может произойти потеря значения при иммутабельном ключе в HashMap
При использовании иммутабельного ключа в HashMap потеря значения может произойти, если после добавления элемента в мапу изменяется состояние ключа, влияющее на его hashCode(). Хотя ключ иммутабельный, если его поля можно изменить (например, через рефлексию), хеш-код изменится, и HashMap не сможет найти элемент по старому ключу.
Пример:
java
public final class Key {
private final int id;
public Key(int id) { this.id = id; }
@Override public int hashCode() { return id; }
// геттеры, equals...
}
Key key = new Key(1);
Map<Key, String> map = new HashMap<>();
map.put(key, "value");
// Изменение поля через рефлексию (нарушение иммутабельности!)
Field field = key.getClass().getDeclaredField("id");
field.setAccessible(true);
field.set(key, 2); // меняем id, влияющий на hashCode
System.out.println(map.get(key)); // null - потеря значения!Решение: всегда делать ключи полностью иммутабельными (без сеттеров, final поля) и не нарушать инкапсуляцию.

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