Šajā apmācībā mēs uzzināsim par Java LinkedHashMap klasi un tās darbībām ar piemēru palīdzību.
LinkedHashMap
Java kolekcijas ietvaros klase nodrošina hash tabulu un saistīta saraksta ieviešanu Karte interfeisu.
LinkedHashMap
Interfeiss paplašina HashMap klasi glabāt savus ierakstus hash tabulā. Tā iekšēji uztur divkārši saistītu sarakstu starp visiem ierakstiem, lai pasūtītu ierakstus.
LinkedHashMap izveide
Lai izveidotu saistītu hashmap, mums vispirms ir jāimportē java.util.LinkedHashMap
pakete. Pēc pakotnes importēšanas šeit mēs varam izveidot saistītus hashmaps Java.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
Iepriekš minētajā kodā mēs esam izveidojuši saistītu hashmap nosaukumu numurus.
Šeit,
- Atslēga - unikāls identifikators, ko izmanto, lai katru elementu (vērtību) saistītu kartē
- Vērtība - elementi, kas saistīti ar atslēgām kartē
Ievērojiet daļu new LinkedHashMap(8, 0.6)
. Pirmais parametrs ir kapacitāte, bet otrais parametrs - loadFactor .
- ietilpība - šī saistītā hashmap ietilpība ir 8. Tas nozīmē, ka tajā var saglabāt 8 ierakstus.
- loadFactor - šī saistītā hashmap slodzes koeficients ir 0,6. Tas nozīmē, ka ikreiz, kad mūsu jaukšanas karte ir aizpildīta par 60%, ieraksti tiek pārvietoti uz jaunu jaukšanas tabulu, kas ir divreiz lielāka par sākotnējās jaukšanas tabulas lielumu.
Noklusējuma jauda un slodzes koeficients
Ir iespējams izveidot saistītu hashmap, nenosakot tā jaudu un slodzes koeficientu. Piemēram,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Pēc noklusējuma,
- saistītā hashmap jauda būs 16
- slodzes koeficients būs 0,75
Piezīme : LinkedHashMap
Klase ļauj mums arī definēt savu ierakstu secību. Piemēram
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Šeit accessOrder ir Būla vērtība. Tās noklusējuma vērtība ir false
. Šajā gadījumā saites hashmap ieraksti tiek sakārtoti, pamatojoties uz to ievietošanas secību.
Tomēr, ja tas true
tiek nodots kā accessOrder, saistītā hashmap ieraksti tiks sakārtoti no vismazāk piekļūtā līdz nesen piekļūtajai.
LinkedHashMap izveide no citām kartēm
Lūk, kā mēs varam izveidot saistītu hashmap, kas satur visus citu karšu elementus.
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); ) )
Rezultāts
LinkedHashMap1: (divi = 2, četri = 4) LinkedHashMap2: (divi = 2, četri = 4, trīs = 3)
LinkedHashMap metodes
LinkedHashMap
Klase nodrošina metodes, kas ļauj mums, lai veiktu dažādas darbības kartē.
Ievietojiet elementus vietnē LinkedHashMap
put()
- ievieto kartē norādīto atslēgu / vērtību kartēšanuputAll()
- ievieto šajā kartē visus ierakstus no norādītās kartesputIfAbsent()
- ievieto kartē norādīto atslēgu / vērtību kartēšanu, ja norādītās atslēgas kartē nav
Piemēram,
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); ) )
Rezultāts
Sākotnējais LinkedHashMap: (divi = 2, četri = 4) Atjaunināts LinkedHashMap: (divi = 2, četri = 4, seši = 6) jauns LinkedHashMap: (viens = 1, divi = 2, četri = 4, seši = 6)
Piekļūstiet LinkedHashMap elementiem
1. Izmantojot entrySet (), keySet () un vērtības ()
entrySet()
- atgriež visu kartes atslēgu / vērtību kartēšanas kopukeySet()
- atgriež visu kartes taustiņu kopuvalues()
- atgriež visu kartes vērtību kopu
Piemēram,
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()); ) )
Rezultāts
LinkedHashMap: (viens = 1, divi = 2, trīs = 3) atslēgu / vērtību kartējumi: (viens = 1, divi = 2, trīs = 3) taustiņi: (viens, divi, trīs) vērtības: (1, 2, 3 )
2. get () un getOrDefault () izmantošana
get()
- atgriež vērtību, kas saistīta ar norādīto atslēgu. Ja atslēga nav atrasta, tā atgriežasnull
.getOrDefault()
- atgriež vērtību, kas saistīta ar norādīto atslēgu. Ja atslēga nav atrasta, tā atgriež norādīto noklusējuma vērtību.
Piemēram,
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); ) )
Rezultāts
LinkedHashMap: (Viens = 1, Divi = 2, Trīs = 3) Atgrieztais skaits: 3 Atgrieztais numurs: 5
Noņemti LinkedHashMap elementi
remove(key)
- atgriež un noņem no kartes ar norādīto atslēgu saistīto ieraksturemove(key, value)
- noņem ierakstu no kartes tikai tad, ja norādītā atslēga ir kartēta par norādīto vērtību un atgriež Būla vērtību
Piemēram,
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); ) )
Rezultāts
LinkedHashMap: (Viens = 1, Divi = 2, Trīs = 3) Noņemtā vērtība: 2 Vai ieraksts (Trīs = 3) ir noņemts? Patiesa atjauninātā LinkedHashMap: (viens = 1)
Citas LinkedHashMap metodes
Metode | Apraksts |
---|---|
clear() | noņem visus ierakstus no kartes |
containsKey() | pārbauda, vai kartē ir norādīta atslēga, un atgriež Būla vērtību |
containsValue() | pārbauda, vai kartē ir norādītā vērtība, un atgriež Būla vērtību |
size() | atgriež kartes lielumu |
isEmpty() | pārbauda, vai karte ir tukša, un atgriež Būla vērtību |
LinkedHashMap Vs. HashMap
Gan LinkedHashMap
un HashMap
ievieš Map
saskarni. Tomēr starp tām pastāv dažas atšķirības.
LinkedHashMap
iekšēji uztur divkārši saistītu sarakstu. Pateicoties tam, tā saglabā savu elementu ievietošanas kārtību.LinkedHashMap
Klases prasa vairāk atmiņas nekāHashMap
. Tas notiek tāpēc, kaLinkedHashMap
iekšēji uztur saistītos sarakstus.- Veiktspēja
LinkedHashMap
ir lēnāka nekāHashMap
.