Java LinkedHashMap

Σε αυτό το σεμινάριο, θα μάθουμε για την κλάση Java LinkedHashMap και τις λειτουργίες της με τη βοήθεια παραδειγμάτων.

Η LinkedHashMapκλάση του πλαισίου συλλογών Java παρέχει τον πίνακα κατακερματισμού και την υλοποίηση συνδεδεμένων λιστών της διεπαφής χάρτη.

Η LinkedHashMapδιεπαφή επεκτείνει την κλάση HashMap για να αποθηκεύσει τις καταχωρίσεις της σε έναν πίνακα κατακερματισμού. Διατηρεί εσωτερικά μια λίστα διπλής σύνδεσης μεταξύ όλων των καταχωρήσεών της για να παραγγείλει τις καταχωρίσεις της.

Δημιουργία LinkedHashMap

Για να δημιουργήσουμε έναν συνδεδεμένο κατακερματισμό, πρέπει java.util.LinkedHashMapπρώτα να εισαγάγουμε το πακέτο. Μόλις εισαγάγουμε το πακέτο, εδώ είναι πώς μπορούμε να δημιουργήσουμε συνδεδεμένους κατακερματισμούς στην Java.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

Στον παραπάνω κώδικα, έχουμε δημιουργήσει έναν συνδεδεμένο hashmap με όνομα.

Εδώ,

  • Κλειδί - ένα μοναδικό αναγνωριστικό που χρησιμοποιείται για τη συσχέτιση κάθε στοιχείου (τιμή) σε έναν χάρτη
  • Τιμή - στοιχεία που σχετίζονται με τα κλειδιά σε έναν χάρτη

Παρατηρήστε το μέρος 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. Σε αυτήν την περίπτωση, οι καταχωρήσεις στο συνδεδεμένο hashmap ταξινομούνται με βάση τη σειρά εισαγωγής τους.

Ωστόσο, εάν trueμεταβιβαστούν ως accessOrder, οι καταχωρίσεις στο συνδεδεμένο hashmap θα παραγγελθούν από την πιο πρόσφατη πρόσβαση στην πιο πρόσφατη πρόσβαση.

Δημιουργία 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: (Two = 2, Four = 4) LinkedHashMap2: (Two = 2, Four = 4, Three = 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); ) ) 

Παραγωγή

 Original LinkedHashMap: (Two = 2, Four = 4) Ενημερωμένο LinkedHashMap: (Two = 2, Four = 4, Six = 6) New LinkedHashMap: (One = 1, Two = 2, Four = 4, Six = 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) Keys: (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) - αφαιρεί την καταχώριση από το χάρτη μόνο εάν το καθορισμένο κλειδί αντιστοιχιστεί ως η καθορισμένη τιμή και επιστρέψει μια τιμή boolean

Για παράδειγμα,

 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); True Update LinkedHashMap: (Ένα = 1)

Άλλες μέθοδοι LinkedHashMap

Μέθοδος Περιγραφή
clear() αφαιρεί όλες τις εγγραφές από το χάρτη
containsKey() ελέγχει εάν ο χάρτης περιέχει το καθορισμένο κλειδί και επιστρέφει μια δυαδική τιμή
containsValue() ελέγχει εάν ο χάρτης περιέχει την καθορισμένη τιμή και επιστρέφει μια δυαδική τιμή
size() επιστρέφει το μέγεθος του χάρτη
isEmpty() ελέγχει εάν ο χάρτης είναι κενός και επιστρέφει μια δυαδική τιμή

LinkedHashMap Vs. HashMap

Τόσο η όσο LinkedHashMapκαι η HashMapεφαρμογή της Mapδιεπαφής. Ωστόσο, υπάρχουν κάποιες διαφορές μεταξύ τους.

  • LinkedHashMapδιατηρεί μια διπλά συνδεδεμένη λίστα εσωτερικά. Λόγω αυτού, διατηρεί τη σειρά εισαγωγής των στοιχείων του.
  • Η LinkedHashMapτάξη απαιτεί περισσότερο χώρο αποθήκευσης από HashMap. Αυτό συμβαίνει επειδή LinkedHashMapδιατηρεί συνδεδεμένες λίστες εσωτερικά.
  • Η απόδοση LinkedHashMapείναι πιο αργή από HashMap.

ενδιαφέροντα άρθρα...