Встречается на 2% собеседований по Java

Как хранятся значения в HashMap

В HashMap значения хранятся в виде массива бакетов (корзин), где каждый бакет содержит связанный список или дерево узлов (в Java 8+). При добавлении пары ключ-значение:

  1. Вычисляется хэш ключа через hashCode()
  2. Определяется индекс бакета: index = hash & (n-1), где n - размер массива
  3. Если бакет пуст - создается нода. При коллизии (одинаковый индекс) элементы добавляются в список/дерево (при достижении порога в 8 элементов список преобразуется в красно-черное дерево для оптимизации поиска)

Пример:

java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);  // hash("apple") & (16-1) = индекс бакета
map.put("banana", 2);

При достижении load factor (по умолчанию 0.75) происходит рехеширование - массив увеличивается вдвое и все элементы перераспределяются.

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

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

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

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