Java LinkedHashMap

В этом руководстве мы узнаем о классе Java LinkedHashMap и его операциях с помощью примеров.

LinkedHashMapКласс рамок коллекций Java предоставляет хэш - таблицу и связанную реализацию списка интерфейса Map.

LinkedHashMapИнтерфейс расширяет класс HashMap для хранения своих записей в хэш - таблице. Он внутренне поддерживает двусвязный список среди всех своих записей, чтобы упорядочить свои записи.

Создание LinkedHashMap

Чтобы создать связанную хэш-карту, мы должны java.util.LinkedHashMapсначала импортировать пакет. После того, как мы импортируем пакет, вот как мы можем создавать связанные хэш-карты в Java.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

В приведенном выше коде мы создали связанную хэш-карту с именем numbers.

Вот,

  • Ключ - уникальный идентификатор, используемый для связи каждого элемента (значения) на карте.
  • Значение - элементы, связанные ключами на карте

Обратите внимание на деталь new LinkedHashMap(8, 0.6). Здесь первый параметр - это емкость, а второй - loadFactor .

  • емкость - емкость этой связанной хэш-карты составляет 8. Это означает, что она может хранить 8 записей.
  • loadFactor - коэффициент загрузки этой связанной хэш-карты составляет 0,6. Это означает, что всякий раз, когда наша хеш-карта заполняется на 60%, записи перемещаются в новую хеш-таблицу, размер которой в два раза превышает размер исходной хеш-таблицы.

Емкость и коэффициент загрузки по умолчанию

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

 //LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap(); 

По умолчанию,

  • емкость связанной хэш-карты будет 16
  • коэффициент загрузки составит 0,75

Примечание . LinkedHashMapКласс также позволяет нам определять порядок его записей. Например

 // LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder); 

Здесь accessOrder - логическое значение. Его значение по умолчанию false. В этом случае записи в связанной хэш-карте упорядочиваются на основе порядка их вставки.

Однако, если trueпередается как accessOrder, записи в связанной хэш-карте будут упорядочены от наименее недавно использованных к наиболее недавно доступным.

Создание LinkedHashMap из других карт

Вот как мы можем создать связанную хэш-карту, содержащую все элементы других карт.

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating a LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("LinkedHashMap1: " + evenNumbers); // Creating a LinkedHashMap from other LinkedHashMap LinkedHashMap numbers = new LinkedHashMap(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashMap2: " + numbers); ) ) 

Вывод

 LinkedHashMap1: (Два = 2, Четыре = 4) LinkedHashMap2: (Два = 2, Четыре = 4, Три = 3) 

Методы LinkedHashMap

LinkedHashMapКласс предоставляет методы, позволяющие выполнять различные операции по карте.

Вставить элементы в LinkedHashMap

  • put() - вставляет указанное сопоставление ключ / значение на карту
  • putAll() - вставляет все записи с указанной карты на эту карту
  • putIfAbsent() - вставляет указанное сопоставление ключа / значения на карту, если указанный ключ отсутствует на карте

Например,

  import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("Original LinkedHashMap: " + evenNumbers); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("Updated LinkedHashMap(): " + evenNumbers); //Creating LinkedHashMap of numbers LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("New LinkedHashMap: " + numbers); ) ) 

Вывод

 Исходная LinkedHashMap: (Два = 2, Четыре = 4) Обновленная LinkedHashMap: (Два = 2, Четыре = 4, Шесть = 6) Новая LinkedHashMap: (Один = 1, Два = 2, Четыре = 4, Шесть = 6) 

Доступ к элементам LinkedHashMap

1. Использование entrySet (), keySet () и values ​​()

  • entrySet() - возвращает набор всех сопоставлений ключ / значение карты
  • keySet() - возвращает набор всех ключей карты
  • values() - возвращает набор всех значений карты

Например,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) ) 

Вывод

 LinkedHashMap: (Один = 1, Два = 2, Три = 3) Сопоставления ключей / значений: (Один = 1, Два = 2, Три = 3) Ключи: (Один, Два, Три) Значения: (1, 2, 3 ) 

2. Использование get () и getOrDefault ()

  • get()- Возвращает значение, связанное с указанным ключом. Если ключ не найден, он возвращается null.
  • getOrDefault()- Возвращает значение, связанное с указанным ключом. Если ключ не найден, возвращается указанное значение по умолчанию.

Например,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Returned Number: " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Returned Number: " + value2); ) ) 

Вывод

 LinkedHashMap: (Один = 1, Два = 2, Три = 3) Возвращенное число: 3 Возвращенное число: 5 

Удалены элементы LinkedHashMap

  • remove(key) - возвращает и удаляет запись, связанную с указанным ключом, с карты
  • remove(key, value) - удаляет запись с карты, только если указанный ключ сопоставлен с указанным значением и возвращает логическое значение

Например,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry Three removed? " + result); System.out.println("Updated LinkedHashMap: " + numbers); ) ) 

Вывод

LinkedHashMap: (Один = 1, Два = 2, Три = 3) Удаленное значение: 2 Удалена ли запись (Три = 3)? Истинно обновленная LinkedHashMap: (One = 1)

Другие методы LinkedHashMap

Метод Описание
clear() удаляет все записи с карты
containsKey() проверяет, содержит ли карта указанный ключ и возвращает логическое значение
containsValue() проверяет, содержит ли карта указанное значение и возвращает логическое значение
size() возвращает размер карты
isEmpty() проверяет, пуста ли карта, и возвращает логическое значение

LinkedHashMap против. HashMap

Оба LinkedHashMapи HashMapреализуют Mapинтерфейс. Однако между ними есть некоторые различия.

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

Интересные статьи...