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, то картина будет следующая: