I denne vejledning lærer vi om Java LinkedHashMap-klassen og dens operationer ved hjælp af eksempler.
Den LinkedHashMap
klasse af Java kollektioner rammer giver hash tabellen og linkede liste implementering af Map-grænsefladen.
Den LinkedHashMap
grænsefladen udvider HashMap klassen til at gemme sine poster i en hash-tabel. Det opretholder internt en dobbeltkoblet liste blandt alle sine poster for at bestille dens poster.
Oprettelse af et LinkedHashMap
For at oprette et linket hashmap skal vi først importere java.util.LinkedHashMap
pakken. Når vi først har importeret pakken, kan du oprette sammenkædede hashmaps i Java her.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
I ovenstående kode har vi oprettet et sammenkædet hashmap med navne.
Her,
- Nøgle - en unik identifikator, der bruges til at knytte hvert element (værdi) til et kort
- Værdi - elementer tilknyttet tasterne på et kort
Læg mærke til delen new LinkedHashMap(8, 0.6)
. Her er den første parameter kapacitet, og den anden parameter er loadFactor .
- kapacitet - Kapaciteten for denne sammenkædede hashmap er 8. Det betyder, at den kan gemme 8 poster.
- loadFactor - Belastningsfaktoren for dette sammenkædede hashmap er 0,6. Dette betyder, at når vores hash-kort er udfyldt med 60%, flyttes posterne til en ny hash-tabel med dobbelt størrelse på den oprindelige hash-tabel.
Standardkapacitet og belastningsfaktor
Det er muligt at oprette en sammenkædet hashmap uden at definere dens kapacitet og belastningsfaktor. For eksempel,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Som standard,
- kapaciteten for det linkede hashmap vil være 16
- belastningsfaktoren er 0,75
Bemærk : LinkedHashMap
Klassen giver os også mulighed for at definere rækkefølgen af dens poster. For eksempel
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Her er accessOrder en boolsk værdi. Dens standardværdi er false
. I dette tilfælde ordnes poster i det linkede hashmap på basis af deres indsætningsrækkefølge.
Men hvis den true
sendes som accessOrder, vil poster i den linkede hashmap blive bestilt fra senest adgang til senest adgang.
Oprettelse af LinkedHashMap fra andre kort
Her er hvordan vi kan oprette et linket hashmap, der indeholder alle elementerne på andre kort.
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); ) )
Produktion
LinkedHashMap1: (To = 2, Fire = 4) LinkedHashMap2: (To = 2, Fire = 4, Tre = 3)
Metoder til LinkedHashMap
Den LinkedHashMap
klasse indeholder metoder, der tillader os at udføre forskellige operationer på kortet.
Indsæt elementer til LinkedHashMap
put()
- indsætter den angivne nøgle- / værdikortlægning på kortetputAll()
- indsætter alle poster fra det angivne kort til dette kortputIfAbsent()
- indsætter den angivne nøgle- / værdikortlægning på kortet, hvis den angivne nøgle ikke er til stede på kortet
For eksempel,
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); ) )
Produktion
Oprindeligt LinkedHashMap: (To = 2, Fire = 4) Opdateret LinkedHashMap: (To = 2, Fire = 4, Seks = 6) Ny LinkedHashMap: (En = 1, To = 2, Fire = 4, Seks = 6)
Få adgang til LinkedHashMap-elementer
1. Brug af entrySet (), keySet () og værdier ()
entrySet()
- returnerer et sæt med alle nøgle- / værdikortlæggelser på kortetkeySet()
- returnerer et sæt af alle tasterne på kortetvalues()
- returnerer et sæt af alle kortets værdier
For eksempel,
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()); ) )
Produktion
LinkedHashMap: (One = 1, Two = 2, Three = 3) Key / Value mappings: (One = 1, Two = 2, Three = 3) Keys: (One, Two, Three) Værdier: (1, 2, 3 )
2. Brug af get () og getOrDefault ()
get()
- Returnerer den værdi, der er knyttet til den angivne nøgle. Hvis nøglen ikke findes, vender den tilbagenull
.getOrDefault()
- Returnerer den værdi, der er knyttet til den angivne nøgle. Hvis nøglen ikke findes, returnerer den den angivne standardværdi.
For eksempel,
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); ) )
Produktion
LinkedHashMap: (One = 1, Two = 2, Three = 3) Returneret nummer: 3 Returneret nummer: 5
Fjernet LinkedHashMap-elementer
remove(key)
- returnerer og fjerner posten tilknyttet den angivne nøgle fra kortetremove(key, value)
- fjerner kun posten fra kortet, hvis den angivne nøgle er kortlagt til at være den angivne værdi og returnerer en boolsk værdi
For eksempel,
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); ) )
Produktion
LinkedHashMap: (One = 1, Two = 2, Three = 3) Fjernet værdi: 2 Er posten (Three = 3) fjernet? Ægte opdateret LinkedHashMap: (One = 1)
Andre metoder til LinkedHashMap
Metode | Beskrivelse |
---|---|
clear() | fjerner alle poster fra kortet |
containsKey() | kontrollerer, om kortet indeholder den angivne nøgle og returnerer en boolsk værdi |
containsValue() | kontrollerer, om kortet indeholder den angivne værdi og returnerer en boolsk værdi |
size() | returnerer størrelsen på kortet |
isEmpty() | kontrollerer, om kortet er tomt og returnerer en boolsk værdi |
LinkedHashMap Vs. HashMap
Både LinkedHashMap
og HashMap
implementerer Map
grænsefladen. Der er dog nogle forskelle mellem dem.
LinkedHashMap
opretholder en dobbeltkoblet liste internt. På grund af dette opretholder det indsætningsrækkefølgen for dets elementer.- Den
LinkedHashMap
klasse kræver mere lagerplads endHashMap
. Dette skyldes,LinkedHashMap
at internt opretholder tilknyttede lister. - Udførelsen af
LinkedHashMap
er langsommere endHashMap
.