Назад к вопросам
СБЕР
Junior — Middle
64
Как реализуется проверка равенства объектов при вставке элемента в HashMap, в частности, после вычисления их hash-кодов?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Java при вставке элемента в HashMap сначала вычисляется hash-код ключа, чтобы определить индекс корзины (bucket) в массиве.
Если в этой корзине уже есть элементы (коллизия), то происходит перебор элементов с помощью метода equals для проверки равенства ключей.
Алгоритм:
- Вычисляется hash-код ключа и преобразуется в индекс массива.
- Если корзина пуста — элемент вставляется.
- Если нет — для каждого элемента в корзине вызывается equals с новым ключом.
- Если equals возвращает true — старое значение заменяется новым.
- Если ни один ключ не равен — новый элемент добавляется в корзину (обычно в связный список или дерево).
Таким образом, 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;
}
}
// Добавление нового элемента
}