Структура данных, которая использует хеш-функцию для отображения значений идентификации, известных как ключи, к их присваиваемым значениям

Карта хеша (или хеш-таблица) является структурой данных, которая содержит пар "значения ключа" и позволяет получать значения ключом.

Самой привлекательной функцией является быстрый поиск элементов, особенно для больших чисел элементов. Хеш отображает работу при помощи хеш-функции для преобразования ключей в число хеша, которое затем используется в качестве индекса в массив "блоков", содержащих один или несколько элементов. Это предоставляет постоянный доступ времени к соответствующему блоку, сопровождаемому линейным поиском желаемого элемента в блоке. Когда число элементов в каждом блоке поддержано на низком уровне (возможно путем динамичного изменения размеров массива блоков, поскольку элементы вставляются), это предлагает постоянный поиск времени в среднем, даже когда число элементов в хеше отображает увеличения. Это может быть значительным преимуществом по сравнению с поиском в основанные на дереве структуры, который должен выполнить больше шагов, когда число элементов увеличивается.

Недостаток хеш-таблиц состоит в том, что элементы не хранятся в очевидном или значимом порядке, поскольку хорошая хеш-функция не отобразит соседние ключи к соседним блокам.

Если много отображений должны быть сохранены в a HashMap экземпляр, создавая его с достаточно большой емкостью позволит отображениям быть сохраненными более эффективно, чем разрешение ему выполнить автоматическое перефразирование по мере необходимости для роста таблицы.

Обратите внимание, что эта реализация не синхронизируется. Если несколько потоков получают доступ к карте хеша одновременно, и по крайней мере один из потоков изменяет карту структурно, это должно синхронизироваться внешне. (Структурная модификация является любой операцией, которая добавляет или удаляет одно или несколько отображений; просто изменение значения, связанного с ключом, который уже содержит экземпляр, не является структурной модификацией.) Это обычно выполняется путем синхронизации на некотором объекте, который естественно инкапсулирует карту. Если никакой такой объект не существует, карта должна быть "перенесена" с помощью метода Collections.synchronizedMap. Это лучше всего сделано во время создания, для предотвращения случайного несинхронизируемого доступа к карте:

Map m = Collections.synchronizedMap(new HashMap(...)); 

Итераторы, возвращенные всеми "методами просмотра набора этого класса", являются сбоем быстро: если карта структурно изменяется когда-либо после того, как итератор создается, всегда кроме через собственный итератор удаляют метод, итератор бросит a ConcurrentModificationException. Таким образом, перед лицом параллельной модификации, итератор перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.

Обратите внимание, что поведение сбоя быстро итератора не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Бросок итераторов сбоя быстро ConcurrentModificationException на основе максимальных усилий. Поэтому было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро итераторов должно использоваться только для обнаружения ошибок.

Этот класс является членом Платформы Наборов Java.

Официальные документы: https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Ссылка Stackoverflow: различия между HashMap и хеш-таблицей?