Назад к вопросам
Junior — Middle
75
Из каких компонентов состоит структура данных HashMap и как она работает внутри?
Ответ от нейросети
sobes.tech AI
HashMap в Java (и Android) состоит из нескольких ключевых компонентов:
- Массив бакетов (buckets) — основной контейнер, где хранятся элементы. Каждый бакет содержит либо null, либо ссылку на связанный список или дерево (в новых версиях).
- Элементы (Entry или Node) — объекты, хранящие пару ключ-значение, а также ссылку на следующий элемент в цепочке при коллизиях.
- Хеш-функция — вычисляет хеш-код ключа, который затем преобразуется в индекс массива бакетов.
Как это работает:
- При добавлении пары ключ-значение вычисляется хеш-код ключа.
- Хеш-код преобразуется в индекс массива (обычно через операцию
hash & (capacity - 1)). - Если бакет пуст, элемент помещается туда.
- Если бакет занят, происходит проверка ключей в цепочке:
- Если ключ уже есть, значение обновляется.
- Если нет, элемент добавляется в цепочку (связный список или дерево).
При большом количестве коллизий связный список может преобразовываться в сбалансированное дерево для повышения производительности.
Пример упрощённой структуры:
class Node<K, V> {
final int hash;
final K key;
V value;
Node<K, V> next;
Node(int hash, K key, V value, Node<K, V> next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
}
class HashMap<K, V> {
Node<K, V>[] table;
int size;
// методы put, get и др.
}