Как хранятся элементы в Bucket в HashMap

«Как хранятся элементы в Bucket в HashMap» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В HashMap элементы хранятся в bucket'ах (корзинах) в виде связных списков или деревьев (в Java 8+).

  • Ключ хэшируется через hashCode(), затем применяется модульная операция (index = hash % capacity), чтобы определить bucket.
  • При коллизии (одинаковый index) элементы добавляются в список.
  • Если список становится слишком большим (по умолчанию TREEIFY_THRESHOLD = 8), он преобразуется в красно-черное дерево для оптимизации поиска (O(log n) вместо O(n)).
  • При уменьшении размера (UNTREEIFY_THRESHOLD = 6) дерево снова превращается в список.

Пример:

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);  // hash("a") % capacity → bucket index
map.put("b", 2);  // если index совпал, добавляется в список/дерево