Главная

Java

Collections Framework


HasMap:

пакет java.util.
Существует два основных вида хеш-таблиц: с цепочками и открытой адресацией.

extends AbstractMap
implements Map, Cloneable, Serializable

класс HasMap - это key-value коллекция работающая по принципу Хеширования. hashCode

Этот класс не дает никаких гарантий упорядоченного размещения элементов.

  1. Берется у ключа int значение через метод *.hash(Object key) , если обьект равен null , то сразу возвращается 0 .

Key-value значения хранаться попарно в классе Entry , а сами классы Entry храняться в массиве с именем table (capacity - по умолчанию имеет значение 16).
Добавление элемента выполняется за время O(1), потому как новые элементы вставляются в начало цепочки списка.
Операции получения и удаления элемента могут выполняться за время O(1), если хэш-функция равномерно распределяет элементы и отсутствуют коллизии.В самом худшем случае, время выполнения может составить Θ(n) .
Ключи и значения могут быть любых типов, в том числе и null. Для хранения примитивных типов используются соответствующие классы-оберки;

hashmap3

Новоявленный объект hashmap, содержит ряд свойств:

Добавление елемента в HashMap:

  1. Сначала ключ проверяется на равенство null. Если это проверка вернула true, будет вызван метод putForNullKey(value)
  2. Далее генерируется хэш на основе ключа. Для генерации используется метод hash(hashCode), в который передается key.hashCode().
  3. С помощью метода indexFor(hash, tableLength), определяется позиция в массиве, куда будет помещен элемент.
  4. При значении хэша 51 и размере таблице 16, мы получаем индекс в массиве 3.
  5. Теперь, зная индекс в массиве, мы получаем список (цепочку) элементов, привязанных к этой ячейке. Хэш и ключ нового элемента поочередно сравниваются с хэшами и ключами элементов из списка и, при совпадении этих параметров, значение элемента перезаписывается.
  6. Если же предыдущий шаг не выявил совпадений, будет вызван метод addEntry(hash, key, value, index) для добавления нового элемента.
  7. hashmap

При возникновении коллизии:

  1. Пропускается, ключ не равен null .
  2. Далее генерируется хэш на основе ключа ("idx".hashCode() =101603)
  3. Определение позиции в массиве .
  4. Новый элемент добавляется в начало цепочки .
  5. hashmap2

Методы:

Полезные ссылки: