HashMap и LinkedHashMap

Anonim

HashMap и LinkedHashMap являются двумя наиболее распространенными и универсальными реализациями Map на платформе Java. Они в основном основаны на хэш-классах, очень похожи друг на друга и используются для создания Карты. Интерфейс карты является последним из основных интерфейсов Framework Collections Framework, который определяет операции, которые поддерживаются набором ассоциаций «ключ-к-значению», в которых ключи уникальны. Эти реализации Map основаны на алгоритме хеширования. Пока класс HashMap реализует неупорядоченные карты, класс LinkedHashMap реализует упорядоченные карты. Реализация LinkedHashMap является подклассом класса HashMap, что означает, что он наследует функции класса HashMap. Между ними нет большой разницы в производительности. Давайте взглянем.

Что такое HashMap?

HashMap является одним из наиболее распространенных и среди четырех универсальных реализаций интерфейса Map в Java на основе алгоритма хэширования. Это аналогично установленному классу HashSet, хотя в обоих классах элементы неупорядочены. Он реализуется как хеш-таблица, но в отличие от LinkedHashMap, он не поддерживает какой-либо порядок по ключам или значениям. В общем, HashMap обеспечивает постоянную производительность для put и get. Класс не является потокобезопасным, но он допускает один нулевой ключ и несколько нулевых значений. Поскольку он не поддерживает итерирующий порядок, он требует меньше памяти.

Что такое LinkedHashMap?

LinkedHashMap входит в число четырех универсальных реализаций интерфейса Map, который является подклассом класса HashMap, который наследует его функции. Хотя он очень похож на HashMap с точки зрения производительности, за исключением того, что он поддерживает порядок вставки ключей, либо в том порядке, в котором ключи вставляются в Карту, либо в том порядке, в котором записи доступны на Карте. Он уточняет контракт своего родительского класса, гарантируя порядок, в котором итераторы возвращают свои элементы. Однако для этого требуется больше памяти, чем HashMap, поскольку она поддерживает двусвязный список в Java.

Разница между HashMap и LinkedHashMap

  1. Основы HashMap Vs. LinkedHashMap

HashMap - это реализация интерфейса Map на Java на основе хэша. Карты представляют собой набор пар ключ-значение и используются, когда списки находятся в упорядоченной коллекции. HashMap - это класс Collection, который хранит значение в парах ключ-значение. Проще говоря, он отображает ключи в значения, означающие, что он может найти значение на основе ключа. LinkedHashMap - это реализация связанного списка интерфейса Map, как HashMap, за исключением того, что он поддерживает заказы элементов, вставленных в него. Это подкласс HashMap, который наследует его функции. LinkedHashMap уточняет контракт своего родительского класса HashMap, гарантируя порядок, в котором итераторы возвращают свои элементы.

  1. Порядок итераций

Ключевое различие между HashMap и LinkedHashMap - это порядок. Элементы HashMap не в порядке, абсолютно случайные, тогда как элементы LinkedHashMap упорядочены. Записи LinkedHashMap находятся в порядке ввода ключей, который является порядком, в котором ключи вставляются в Карту. Это означает, что первый ключ, вставленный в карту, сначала перечисляется, так и связанное с ним значение, а последняя введенная в последствии запись. LinkedHashMap имеет предсказуемый порядок итераций, что означает, что он также может поддерживать свои элементы в порядке доступа, который является порядком доступа к элементам.

  1. Реализация

Оба класса HashMap и LinkedHashMap используют хеширование для реализации интерфейса Map в Java, за исключением того, что HashMap реализуется как хеш-таблица, тогда как LinkedHashMap поддерживает двусвязный список ковшей, проходящий через все его записи. Вот почему LinkedHashMap требует больше памяти, чем HashMap, потому что, в отличие от HashMap, он поддерживает заказ. Он удаляет хаотическое упорядочение HashMap без дополнительных затрат, которые были бы понесены иначе с TreeMap. Кроме того, класс LinkedHashMap очень похож на класс HashMap во многих аспектах, таких как синхронизация и нулевые ключи / значения, так как оба допускают один нулевой ключ и множество нулевых значений.

  1. Производительность для HashMap Vs. LinkedHashMap

Хотя оба класса обеспечивают сопоставимую производительность, считается, что класс HashMap является предпочтительным выбором, если заказ не является проблемой, поскольку он не гарантирует, что итерационный порядок Карты. Операции, такие как добавление, удаление или поиск записей на основе ключа, являются постоянным временем, так как они имеют ключ. Таким образом, добавление, удаление и поиск записей в LinkedHashMap может быть немного медленнее, чем в HashMap, потому что он поддерживает двусвязный список Buckets в Java. Кроме того, HashMap требует меньше памяти, чем LinkedHashMap, потому что порядок не поддерживается.

HashMap и LinkedHashMap: Сравнительная таблица

Резюме HashMap Vs. LinkedHashMap

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