ENIGMA AI
ENIGMA AI
Java Средний

Как работает HashMap? Какова временная сложность операций?

HashMap в Java

Структура:

HashMap — хеш-таблица с методом цепочек (chaining).

[0] → null
[1]Node(key1, val1) → Node(key2, val2)
[2] → null
[3]Node(key3, val3)
...

Основные параметры:

  • Initial Capacity: 16 (по умолчанию)
  • Load Factor: 0.75
  • Threshold: capacity × loadFactor

Процесс добавления:

map.put("key", "value");

// 1. Вычисление хеша
int hash = key.hashCode() ^ (key.hashCode() >>> 16);

// 2. Определение бакета
int index = hash & (capacity - 1);

// 3. Добавление/обновление в бакете

Временная сложность:

Операция Средняя Худшая
get() O(1) O(n) / O(log n)*
put() O(1) O(n) / O(log n)*
remove() O(1) O(n) / O(log n)*
containsKey() O(1) O(n) / O(log n)*

*В Java 8+ при >8 элементах в бакете — красно-чёрное дерево

Коллизии:

// Все ключи с одинаковым hashCode
// попадают в один бакет

// Java 8+: бакет превращается в дерево
// при TREEIFY_THRESHOLD = 8

Resize (расширение):

// Когда size > threshold
// capacity удваивается
// Все элементы перехешируются

HashMap<String, Integer> map = new HashMap<>(100);
// Задать начальную ёмкость для оптимизации

Сравнение с другими:

Реализация Порядок Null ключ Потокобезопасность
HashMap Нет Да (1) Нет
LinkedHashMap Вставки Да (1) Нет
TreeMap Сортированный Нет Нет
ConcurrentHashMap Нет Нет Да

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы