V tej vadnici bomo s pomočjo primerov spoznali razred Java LinkedHashMap in njegovo delovanje.
LinkedHashMap
Razred okviru Java zbirk zagotavlja mizo razpršitve in povezano izvajanje seznam vmesnika Map.
LinkedHashMap
Vmesnik razširja razred HashMap za shranjevanje svoje vnose v hash tabele. Notranjo vodi dvojno povezan seznam med vsemi svojimi vnosi, da jih razvrsti.
Ustvarjanje LinkedHashMap
Če želite ustvariti povezano hashmapo, moramo najprej uvoziti java.util.LinkedHashMap
paket. Ko uvozimo paket, tukaj je opisano, kako lahko v Javi ustvarimo povezane hashmape.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
V zgornji kodi smo ustvarili povezano hashmapo z imenom številke.
Tukaj,
- Ključ - enolični identifikator, ki se uporablja za povezovanje vsakega elementa (vrednosti) na zemljevidu
- Vrednost - elementi, povezani s ključi na zemljevidu
Upoštevajte del new LinkedHashMap(8, 0.6)
. Tu je prvi parameter zmogljivost, drugi pa loadFactor .
- zmogljivost - Zmogljivost tega povezanega hashmapa je 8. Pomen, lahko shrani 8 vnosov.
- loadFactor - Faktor obremenitve tega povezanega hashmapa je 0,6. To pomeni, da se vnosi, kadar je naša zemljepisna karta razpršena za 60%, premaknejo v novo razpredelnico z dvojno velikostjo izvirne razpredelnice.
Privzeta zmogljivost in faktor obremenitve
Možno je ustvariti povezano hashmapo, ne da bi opredelili njegovo zmogljivost in faktor obremenitve. Na primer
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Privzeto,
- zmogljivost povezanega hashmapa bo 16
- faktor obremenitve bo 0,75
Opomba : LinkedHashMap
Razred nam omogoča tudi določitev vrstnega reda vnosov. Na primer
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Tu je accessOrder logična vrednost. Njegova privzeta vrednost je false
. V tem primeru so vnosi v povezani hashmapi razvrščeni na podlagi vrstnega reda vstavljanja.
Če pa true
se posreduje kot accessOrder, bodo vnosi v povezanem hashmapu razvrščeni od najmanj nedavno dostopnih do nedavno dostopnih.
Ustvarjanje LinkedHashMap iz drugih zemljevidov
Tukaj je opisano, kako lahko ustvarimo povezani hashmap, ki vsebuje vse elemente drugih zemljevidov.
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); ) )
Izhod
LinkedHashMap1: (Two = 2, Four = 4) LinkedHashMap2: (Two = 2, Four = 4, Three = 3)
Metode LinkedHashMap
LinkedHashMap
Razred določa metode, ki nam omogočajo, da opravljajo različne dejavnosti na zemljevidu.
Vstavite elemente v LinkedHashMap
put()
- na zemljevid vstavi določeno preslikavo ključa / vrednostiputAll()
- na to karto vstavi vse vnose z določenega zemljevidaputIfAbsent()
- na zemljevid vstavi določeno preslikavo ključa / vrednosti, če določeni ključ ni prisoten na zemljevidu
Na primer
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); ) )
Izhod
Original LinkedHashMap: (Two = 2, Four = 4) Posodobljen LinkedHashMap: (Two = 2, Four = 4, Six = 6) New LinkedHashMap: (One = 1, Two = 2, Four = 4, Six = 6)
Dostopite do elementov LinkedHashMap
1. Uporaba entrySet (), keySet () in vrednosti ()
entrySet()
- vrne nabor vseh preslikav ključ / vrednost zemljevidakeySet()
- vrne nabor vseh tipk zemljevidavalues()
- vrne niz vseh vrednosti zemljevida
Na primer
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()); ) )
Izhod
LinkedHashMap: (One = 1, Two = 2, Three = 3) Preslikave ključa / vrednosti: (One = 1, Two = 2, Three = 3) Tipke: (One, Two, Three) Vrednosti: (1, 2, 3 )
2. Uporaba get () in getOrDefault ()
get()
- Vrne vrednost, povezano z navedenim ključem. Če ključa ne najdemo, se vrnenull
.getOrDefault()
- Vrne vrednost, povezano z navedenim ključem. Če ključa ne najdemo, vrne določeno privzeto vrednost.
Na primer
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); ) )
Izhod
LinkedHashMap: (One = 1, Two = 2, Three = 3) Vrnjena številka: 3 Vrnjena številka: 5
Odstranjeni elementi LinkedHashMap
remove(key)
- vrne in z zemljevida odstrani vnos, povezan z določenim ključemremove(key, value)
- odstrani vnos s zemljevida samo, če je podan ključ preslikan v določeno vrednost in vrne logično vrednost
Na primer
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); ) )
Izhod
LinkedHashMap: (One = 1, Two = 2, Three = 3) Odstranjena vrednost: 2 Ali je vnos (Three = 3) odstranjen? Resnično posodobljen LinkedHashMap: (One = 1)
Druge metode LinkedHashMap
Metoda | Opis |
---|---|
clear() | odstrani vse vnose z zemljevida |
containsKey() | preveri, ali zemljevid vsebuje navedeni ključ in vrne logično vrednost |
containsValue() | preveri, ali zemljevid vsebuje navedeno vrednost in vrne logično vrednost |
size() | vrne velikost zemljevida |
isEmpty() | preveri, ali je zemljevid prazen, in vrne logično vrednost |
LinkedHashMap Vs. HashMap
Tako the LinkedHashMap
kot tudi HashMap
implementira Map
vmesnik. Vendar obstajajo nekatere razlike med njimi.
LinkedHashMap
vodi interno dvojno povezan seznam. Zaradi tega ohranja vrstni red vstavljanja svojih elementov.LinkedHashMap
Razred zahteva več prostora za shranjevanje kotHashMap
. To je zato, kerLinkedHashMap
interno vzdržuje povezane sezname.- Zmogljivost
LinkedHashMap
je počasnejša odHashMap
.