Sobes.tech
Back to questions
Junior — Middle
74

Из каких компонентов состоит структура данных HashMap и как она работает внутри?

Answer from AI

sobes.tech AI

HashMap в Java (и Android) состоит из нескольких ключевых компонентов:

  • Массив бакетов (buckets) — основной контейнер, где хранятся элементы. Каждый бакет содержит либо null, либо ссылку на связанный список или дерево (в новых версиях).
  • Элементы (Entry или Node) — объекты, хранящие пару ключ-значение, а также ссылку на следующий элемент в цепочке при коллизиях.
  • Хеш-функция — вычисляет хеш-код ключа, который затем преобразуется в индекс массива бакетов.

Как это работает:

  1. При добавлении пары ключ-значение вычисляется хеш-код ключа.
  2. Хеш-код преобразуется в индекс массива (обычно через операцию hash & (capacity - 1)).
  3. Если бакет пуст, элемент помещается туда.
  4. Если бакет занят, происходит проверка ключей в цепочке:
    • Если ключ уже есть, значение обновляется.
    • Если нет, элемент добавляется в цепочку (связный список или дерево).

При большом количестве коллизий связный список может преобразовываться в сбалансированное дерево для повышения производительности.

Пример упрощённой структуры:

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 и др.
}