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); 

У наведеному вище коді ми створили пов’язану хеш-карту з іменами чисел.

Ось,

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

Зверніть увагу на частину 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 () та значень ()

  • 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: (One = 1, Two = 2, Three = 3) Отображення ключів / значень: (One = 1, Two = 2, Three = 3) Клавіші: (One, Two, Three) Значення: (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

І the, LinkedHashMapі HashMapреалізує Mapінтерфейс. Однак між ними існують певні відмінності.

  • LinkedHashMapведе внутрішньо подвійний зв’язок. Завдяки цьому він підтримує порядок вставки своїх елементів.
  • LinkedHashMapКлас вимагає більше пам'яті , ніж HashMap. Це LinkedHashMapпов’язано з тим, що внутрішньо підтримує зв’язані списки.
  • Продуктивність LinkedHashMapповільніша, ніж HashMap.

Цікаві статті...