Назад к вопросам
Junior — Middle
97
Какие типы объектов рекомендуется использовать в качестве ключа в HashMap, чтобы избежать их потери или неправильного поведения?
Ответ от нейросети
sobes.tech AI
В качестве ключей в HashMap рекомендуется использовать объекты с неизменяемым состоянием (immutable), чтобы избежать проблем с потерей данных или неправильным поведением. Это связано с тем, что HashMap использует методы hashCode() и equals() для поиска и сравнения ключей. Если состояние объекта-ключа изменится после помещения в HashMap, то его хэш-код может измениться, и объект станет недоступен для поиска.
Чаще всего в качестве ключей используют:
- Строки (
String), так как они неизменяемы. - Объекты-обертки над примитивами (
Integer,Long,UUIDи т.п.), которые тоже неизменяемы. - Кастомные классы с переопределёнными
hashCode()иequals(), при этом все поля, участвующие в вычислении хэш-кода, должны быть неизменяемыми.
Пример:
public final class PersonKey {
private final String passportNumber;
public PersonKey(String passportNumber) {
this.passportNumber = passportNumber;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof PersonKey)) return false;
PersonKey that = (PersonKey) o;
return passportNumber.equals(that.passportNumber);
}
@Override
public int hashCode() {
return passportNumber.hashCode();
}
}
Таким образом, ключи должны быть неизменяемыми и корректно реализовывать hashCode() и equals().