Перейти к содержимому

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

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

    Что такое HashMap?

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

    Что такое LinkedHashMap?

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

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

      Основы работы HashMap и LinkedHashMap. LinkedHashMap

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

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

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

    Реализация

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

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

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

    Резюме HashMap vs. LinkedHashMap

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Adblock
    detector