Автор оригинала: Pankaj Kumar.
LinkedHashMap на Java
- Это часть фреймворка Java Collections .
- LinkedHashMap-это реализация хэш-таблицы и связанного списка интерфейса Map .
- LinkedHashMap расширяет HashMap класс.
- LinkedHashMap поддерживает порядок вставки. Таким образом, при повторении его ключей элементы возвращаются в том порядке, в котором они были вставлены.
- LinkedHashMap использует двусвязный список для поддержания порядка вставки.
- Если ключ вставляется повторно, порядок его вставки не изменяется.
- Это полезно, когда вам нужна карта, на которой мы можем перебирать записи в порядке вставки, но не хотим иметь дело с дополнительными накладными расходами, связанными с Картой деревьев .
- LinkedHashMap допускает нулевые записи для ключа и значения. Может быть один нулевой ключ и несколько нулевых значений.
- LinkedHashMap не является потокобезопасным. Если вы хотите использовать его в многопоточной среде, вы можете создать синхронизированную оболочку поверх него, используя Коллекции.Метод synchronizedMap ().
Конструкторы LinkedHashMap
В классе LinkedHashMap есть 5 конструкторов.
Конструкторы LinkedHashMap
- LinkedHashMap() : создает пустой экземпляр LinkedHashMap с начальной емкостью по умолчанию (16) и коэффициентом загрузки (0,75).
- LinkedHashMap(int initialCapacity) : создает пустой экземпляр LinkedHashMap с заданной начальной емкостью и коэффициентом загрузки (0,75). Он выдает
Исключение IllegalArgumentException
, если начальная емкость отрицательна. - LinkedHashMap(int initialCapacity, коэффициент загрузки с плавающей точкой) : создает пустой экземпляр LinkedHashMap с заданной начальной емкостью и коэффициентом загрузки. Он создает исключение IllegalArgumentException, если начальная емкость отрицательна или коэффициент нагрузки не является положительным.
- LinkedHashMap(int initialCapacity, коэффициент загрузки с плавающей точкой, логический порядок доступа) : создает пустое LinkedHashMap с заданной начальной емкостью, коэффициентом загрузки и режимом упорядочения. Если порядок доступа верен – режим заказа-порядок доступа, в противном случае порядок вставки.
- LinkedHashMap(карта расширяет K, ? расширяет V> m) : создает экземпляр LinkedHashMap, упорядоченный вставкой, с теми же сопоставлениями, что и указанная карта. Он выдает Исключение NullPointerException , если данная карта равна нулю. расширяет K, ? расширяет V> m)
Вот простой пример, подтверждающий, что LinkedHashMap поддерживает порядок вставки своих ключей.
package com.journaldev.examples; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExamples { public static void main(String[] args) { MapvowelsMap = new HashMap<>(); vowelsMap.put(1, "a"); vowelsMap.put(2, "e"); vowelsMap.put(5, "u"); vowelsMap.put(4, "o"); vowelsMap.put(3, "i"); vowelsMap.forEach((k, v) -> System.out.println("[" + k + "," + v + "]")); LinkedHashMap lhm = new LinkedHashMap<>(); lhm.put(1, "A"); lhm.put(2, "E"); lhm.put(5, "U"); lhm.put(4, "O"); lhm.put(3, "I"); lhm.forEach((k, v) -> System.out.println("[" + k + "," + v + "]")); } }
Выход:
[1,a] [2,e] [3,i] [4,o] [5,u] [1,A] [2,E] [5,U] [4,O] [3,I]
Методы LinkedHashMap
Для класса LinkedHashMap не существует эксклюзивных методов. Он использует методы из класса HashMap, расширяя его. Но некоторые методы переопределены для порядка вставки записей.
- containsValue(значение объекта) : использует метод связанного списка для более быстрого разрешения.
- get(ключ объекта), getOrDefault(ключ объекта, V Значение по умолчанию)
- очистить()
- набор ключей(): возвращается экземпляр связанного набора ключей.
- forEach(), replaceAll(): использует подход реализации связанного списка для итерации порядка вставки и более быстрой обработки.
LinkedHashMap против HashMap
- LinkedHashMap расширяет класс HashMap. Таким образом, HashMap является суперклассом класса LinkedHashMap.
- LinkedHashMap поддерживает порядок вставки, в котором HashMap не поддерживает никакого порядка записей.
- Повторение записей LinkedHashMap всегда приводит к одной и той же последовательности элементов. Повторение записей хэш-карты может привести к случайной последовательности, поскольку порядок не поддерживается.
- Производительность LinkedHashMap немного ниже, чем у HashMap, из-за дополнительных затрат на поддержание связанного списка, за одним исключением: повторение представлений коллекции LinkedHashMap требует времени, пропорционального размеру карты, независимо от ее емкости. Итерация по хэш-карте, вероятно, будет более дорогостоящей, требующей времени, пропорционального ее емкости.
LinkedHashMap против карты деревьев
Если вы хотите получить доступ к элементам карты в порядке вставки, рекомендуется использовать LinkedHashMap. Он обеспечивает высокую производительность и не требует дополнительных затрат, связанных с картой деревьев.
Ссылка : Документы API LinkedHashMap