У цьому підручнику ми дізнаємося про клас 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
.