Ответ
В 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 совпал, добавляется в список/дерево