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

Как устроен HashMap внутри

HashMap в Java основан на массиве Node<K,V>[], где каждый элемент (бакет) может содержать связанный список или дерево (в Java 8+) для разрешения коллизий.

Основные моменты:

  • При добавлении элемента вычисляется хеш-ключа (hashCode()), затем индекс бакета: index = (n - 1) & hash, где n — размер массива.
  • Если бакет пуст — элемент сохраняется. Если нет — добавляется в конец списка или дерева (если размер списка > TREEIFY_THRESHOLD (8)).
  • При достижении loadFactor (по умолчанию 0.75) массив увеличивается вдвое и элементы перераспределяются.

Пример:

java
Map<String, Integer> map = new HashMap<>();
map.put("key", 1); // hash("key") -> индекс, сохранение в бакет
map.get("key");    // аналогичный расчёт индекса и поиск

Нюансы:

  • hashCode() должен быть консистентным и равномерным.
  • В Java 8 при коллизиях используется красно-чёрное дерево для улучшения производительности с O(n) до O(log n).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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