Встречается на 2% собеседований по Java
Допустимо ли использовать класс User с изменяемыми полями в качестве ключа в HashMap
Использование изменяемого класса User в качестве ключа HashMap возможно, но крайне не рекомендуется. Проблема в том, что если изменить поле объекта после добавления в HashMap, изменится его хэш-код, что нарушит работу коллекции - объект может стать "потерянным" в мапе.
java
class User {
String name;
// геттеры/сеттеры
@Override
public int hashCode() {
return name != null ? name.hashCode() : 0;
}
}
User user = new User();
user.setName("Alice");
Map<User, String> map = new HashMap<>();
map.put(user, "value");
user.setName("Bob"); // хэш изменился
map.get(user); // вернет null - объект не найденЛучшие практики:
- Делать ключи неизменяемыми (immutable)
- Если изменяемость необходима - не менять поля, участвующие в hashCode()/equals() после добавления в HashMap
- Альтернатива - использовать неизменяемый идентификатор (например, userId) в качестве ключа

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