Встречается на собеседованиях • сегодня

Какие знаешь контракты ключа в HashMap

В Java ключи в HashMap должны соблюдать два основных контракта:

  1. Контракт equals() и hashCode():
    • Если два объекта равны по equals(), их hashCode() должен быть одинаковым.
    • Обратное необязательно: разные объекты могут иметь одинаковый хеш (коллизия).
  1. Неизменяемость (рекомендация):
    • Ключ должен быть иммутабельным или, как минимум, не менять hashCode() после добавления в HashMap.
    • Изменение ключа приведёт к потере доступа к значению, так как хеш-бакет определяется по старому hashCode().

Пример нарушения (плохая практика):

java
class MutableKey {
    String value;

    @Override
    public int hashCode() { return value.hashCode(); }
    @Override
    public boolean equals(Object o) { /*...*/ }
}

MutableKey key = new MutableKey("A");
map.put(key, 1);
key.value = "B";  // Теперь map.get(key) может вернуть null!

Используйте String, Integer или другие иммутабельные типы для ключей.

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

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

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

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