Встречается на 2% собеседований по Java
Можно ли переопределить hashCode иммутабельного класса, чтобы использовать его как ключ в HashMap
Да, можно. При переопределении hashCode() для иммутабельного класса важно соблюдать контракт:
- Если
equals()возвращаетtrue,hashCode()должен возвращать одинаковое значение. - Если
equals()возвращаетfalse,hashCode()желательно должен возвращать разные значения (но не обязательно).
Пример:
java
public final class ImmutableKey {
private final String id;
private final int version;
text
public ImmutableKey(String id, int version) {
this.id = id;
this.version = version;
}
@Override
public int hashCode() {
return 31 * id.hashCode() + version;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ImmutableKey)) return false;
ImmutableKey key = (ImmutableKey) o;
return version == key.version && id.equals(key.id);
}}
text
Использование в HashMap:
```java
Map<ImmutableKey, String> map = new HashMap<>();
map.put(new ImmutableKey("A", 1), "Value");Иммутабельность ключа гарантирует, что его hashCode не изменится после добавления в HashMap, что критично для корректной работы.

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