Найти тему

Java. Заметки про HashMap

HashMap - реализация Map на хэш-таблицах.

Ключи и значения могут быть любых типов, в том числе и null.

Создание объекта

Map<Object, Object> hashMap = new HashMap<Object, Object>();

Созданный объект hashMap содержит свойства :

  • table — массив Map.Entry<K,V>, который является хранилищем ссылок на списки (цепочки) значений;
  • loadFactor — коэффициент загрузки. Значение по умолчанию 0.75;
  • threshold — предельное количество элементов, при достижении которого размер хэш-таблицы увеличивается вдвое. Рассчитывается по формуле (capacity * loadFactor).

Можно указать свою емкость и коэффициент загрузки, используя конструкторы HashMap(capacity) и HashMap(capacity, loadFactor). Максимальная емкость = 1073741824 (максимального значения int).

Добавление значений:

1. Генерируется хэш ключа.

2. Вычисляется индекс.

3. Вставляется в таблицу на позицию, равную индексу с шага 2, если место свободно.

4. В случае коллизии на шаге 3 (место для вставки занято) выполняем сравнение ключей по hashCode() и equals(): если равны, то меняем значение на новое, иначе в элемент Map.Entry<K,V> добавляем ссылку на новый элемент.

Если у двух элементов будет одинаковый индекс=3, то картина будет следующая: