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

Как потерять объект в HashMap

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

java
class Key {
    int id;

    @Override
    public int hashCode() { return id; }

    @Override
    public boolean equals(Object o) { /*...*/ }
}

Key key = new Key();
key.id = 1;
Map<Key, String> map = new HashMap<>();
map.put(key, "value");

key.id = 2; // Изменяем ключ!
map.get(key); // Вернет null - объект "потерян"

Решение: используйте неизменяемые объекты (String, Integer) в качестве ключей или не изменяйте ключи после добавления.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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