В этом руководстве мы узнаем о классе 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
.