В този урок ще научим за класа 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: (One = 1, Two = 2, Three = 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: (One = 1, Two = 2, Three = 3) Премахната стойност: 2 Премахнат ли е записът (Three = 3)? Вярно актуализирана LinkedHashMap: (One = 1)
Други методи на LinkedHashMap
Метод | Описание |
---|---|
clear() | премахва всички записи от картата |
containsKey() | проверява дали картата съдържа посочения ключ и връща булева стойност |
containsValue() | проверява дали картата съдържа посочената стойност и връща булева стойност |
size() | връща размера на картата |
isEmpty() | проверява дали картата е празна и връща булева стойност |
LinkedHashMap Vs. HashMap
И двете, LinkedHashMap
и HashMap
изпълнява Map
интерфейса. Между тях обаче има някои разлики.
LinkedHashMap
поддържа вътрешно двойно свързан списък. Поради това той поддържа реда на вмъкване на своите елементи.- В
LinkedHashMap
класа изисква повече място за съхранение, отколкотоHashMap
. Това е така, защотоLinkedHashMap
поддържа вътрешно свързани списъци. - Ефективността на
LinkedHashMap
е по-бавна отHashMap
.