Sobes.tech
Назад к вопросам
Junior — Middle
64

Как реализуется проверка равенства объектов при вставке элемента в HashMap, в частности, после вычисления их hash-кодов?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Java при вставке элемента в HashMap сначала вычисляется hash-код ключа, чтобы определить индекс корзины (bucket) в массиве.

Если в этой корзине уже есть элементы (коллизия), то происходит перебор элементов с помощью метода equals для проверки равенства ключей.

Алгоритм:

  1. Вычисляется hash-код ключа и преобразуется в индекс массива.
  2. Если корзина пуста — элемент вставляется.
  3. Если нет — для каждого элемента в корзине вызывается equals с новым ключом.
  4. Если equals возвращает true — старое значение заменяется новым.
  5. Если ни один ключ не равен — новый элемент добавляется в корзину (обычно в связный список или дерево).

Таким образом, hashCode служит для быстрого поиска корзины, а equals — для точного сравнения ключей.

Пример:

@Override
public V put(K key, V value) {
    int hash = key == null ? 0 : key.hashCode();
    int index = (hash) & (table.length - 1);
    for (Entry<K,V> e = table[index]; e != null; e = e.next) {
        if (e.hash == hash && (e.key.equals(key))) {
            V oldValue = e.value;
            e.value = value;
            return oldValue;
        }
    }
    // Добавление нового элемента
}