Рекомендуем, 2024

Выбор редакции

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

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

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

Основа для сравненияHashMapLinkedHashMap
основнойПорядок вставки в HashMap не сохраняется.Порядок вставки сохраняется в LinkedHashMap.
Структура данныхHashMap использует HashTable для хранения карт.LinkedHashMap использует HashTable вместе со Linked List для хранения карты.
Расширяет / РеализуетHashMap расширяет AbstractMap и реализует интерфейс Map.LinkedHashMap расширяет Hashmap.
ВерсияHashMap был представлен в JDK 2.0.LinkedHashMap был представлен в JDK 4.0.
накладные расходыСравнительно меньше накладных расходов.Сравнительно больше накладных расходов, потому что он должен поддерживать порядок записей на карте.

Определение HashMap

HashMap - это класс, который используется для создания карты. Он реализует интерфейс карты . Он также расширяет класс AbstractMap, так что он может использовать хеш-таблицу для хранения записей на карте. Записи карты - это пара, в которой каждый ключ связан со значением. Ключ в записи используется для получения значения, следовательно, ключ должен быть уникальным. Вот почему дубликаты ключей не разрешены в HashMap. Но ключ в каждой записи карты может иметь различный тип, т.е. ключи в карте, созданной HashMap, могут быть неоднородными. Структура данных, используемая HashMap для хранения карты, представляет собой хеш-таблицу.

Порядок вставки записей в HashMap не сохраняется. Вставка записей в карту, созданную с помощью HashMap, основана на хэш-коде, рассчитанном по ключам в записях. Если по ошибке вы ввели дубликат ключа в HashMap, он заменит предыдущее значение этого ключа новым предложенным значением и вернет старое значение. Если дубликат ключа не используется и замена не производится, ключ всегда возвращает значение Null. Давайте посмотрим, как добавить записи в хэш-карту в следующем примере.

 Hashmap hm = new Hashmap (); hm.put («Аджай», 275); hm.put («Виджай», 250); hm.put («Джонни», 150); hm.put («Джордан», 200); System.out.println (хм); / * вывод * / {Виджай = 250, Джонни = 150, Аджай = 275, Иордания = 200} 

Как и в приведенном выше коде, вы можете видеть, что я создал объект HashMap и добавил записи, используя метод put, и когда я печатал объект HashMap, записи не печатались в том порядке, в котором они были вставлены. Следовательно, вы не можете притворяться, что порядок записей в HashMap вернется. HashMap использует все методы интерфейса Map и класса AbstractMap и не вводит никаких новых методов; у него есть свои конструкторы. Емкость по умолчанию для хэш-карты равна 16, а коэффициент заполнения по умолчанию равен 0, 75 .

Определение LinkedHashMap

LinkedHashMap также используется классом для создания карты. LinkedHashMap расширяет класс HashMap и был позже представлен в HashMap в версии 4.0 JDK. Будучи дочерним классом класса HashMap, LinkedHashMap точно такой же, как класс HashMap, включая конструкторы и методы. Но LinkedHashMap отличается тем, что поддерживает порядок вставки записей в карту. Структура данных, которая используется LinkedHashMap для хранения карты, представляет собой связанный список и хэш-таблицу .

В дополнение к методам, унаследованным HashMap, LinkedHashMap представляет один новый метод, который представляет собой removeEldestEntry () . Этот метод используется для удаления самой старой записи на карте. Емкость LinkedHashMap по умолчанию равна 16, а коэффициент заполнения по умолчанию равен 0, 75, что также аналогично классу HashMap.

Ключевые различия между HashMap и LinkedHashMap в Java

  1. Наиболее важным отличием является то, что порядок вставки HashMap не сохраняется, тогда как порядок вставки LinkedHashMap сохраняется .
  2. Структура данных, используемая HashMap для хранения элементов карты, является Hashtable . С другой стороны, структура данных, используемая LinkedHashMap, - это связанный список и Hashtable .
  3. Класс HashMap расширяет класс AbstractMap и реализует интерфейс Map . Однако класс LinkedHashMap является дочерним классом класса HashMap, т.е. класс LinkedHashMap расширяет класс HashMap.
  4. Класс HashMap был представлен в версии JDK 2.0 . Класс LinkedHashMap был представлен позже в версии JDK 4.0 .
  5. Сравнительно класс LinkedHashMap имеет больше накладных расходов, чем класс HashMap, поскольку он должен поддерживать порядок элементов, вставленных в карту.

Заключение:

LinkedHashMap должен использоваться только там, где нас интересует последовательность элементов, вставленных в карту.

Top