Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ του HashMap και του LinkedHashMap στην Java

Το HashMap και το LinkedHashMap είναι οι κλάσεις, αρκετά παρόμοιες μεταξύ τους και χρησιμοποιούνται για τη δημιουργία ενός χάρτη. Η κλάση HashMap επεκτείνει την κλάση AbstractMap για να χρησιμοποιήσει έναν πίνακα κατακερματισμού για να αποθηκεύσει τα στοιχεία στον χάρτη. Η κλάση LinkedHashMap διατηρεί τις καταχωρίσεις στο χάρτη με βάση την εντολή εισαγωγής τους. Το χαρακτηριστικό που διακρίνει το HashMap και το LinkedHashMap από το άλλο είναι ότι το Hashmap δεν διατηρεί τη σειρά των αποθηκευμένων καταχωρήσεων σε ένα χάρτη. Από την άλλη πλευρά, το LinkedHashMap χρησιμοποιεί μια υβριδική δομή δεδομένων για να διατηρεί τη σειρά των καταχωρίσεων στις οποίες έχουν εισαχθεί. Στο παρακάτω Διάγραμμα σύγκρισης εξέτασα κάποιες άλλες διαφορές μεταξύ του HashMap και του LinkedHashMap, απλά ρίξτε μια ματιά.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςHashMapLinkedHashMap
ΒασικόςΗ σειρά εισαγωγής στο HashMap δεν διατηρείται.Η σειρά εισαγωγής διατηρείται στο LinkedHashMap.
Δομή δεδομένωνΤο HashMap χρησιμοποιεί το HashTable για την αποθήκευση χαρτών.Το LinkedHashMap χρησιμοποιεί το HashTable μαζί με τη Λίστα Συνδεδεμένων για την αποθήκευση χάρτη.
Επεκτείνει / εφαρμόζειΤο HashMap επεκτείνει το AbstractMap και υλοποιεί τη διεπαφή χάρτη.Το LinkedHashMap επεκτείνει το Hashmap.
ΕκδοχήΤο HashMap εισήχθη στο JDK 2.0.Το LinkedHashMap εισήχθη στο JDK 4.0.
Πάνω από το κεφάλιΣυγκριτικά λιγότερα έξοδα.Συγκριτικά περισσότερη επιβάρυνση, επειδή πρέπει να διατηρήσει τη σειρά των καταχωρήσεων χάρτη.

Ορισμός του HashMap

Το HashMap είναι μια κλάση που χρησιμοποιείται για τη δημιουργία ενός χάρτη. Εφαρμόζει το Χάρτη Διεπαφής. Επίσης επεκτείνει την κλάση AbstractMap έτσι ώστε να μπορεί να χρησιμοποιήσει έναν πίνακα κατακερματισμού για να αποθηκεύσει τις καταχωρήσεις στον χάρτη. Οι καταχωρήσεις του χάρτη είναι ένα ζεύγος όπου κάθε πλήκτρο συνδέεται με την τιμή. Το κλειδί στην καταχώριση χρησιμοποιείται για την ανάκτηση της τιμής ως εκ τούτου, το κλειδί πρέπει να είναι μοναδικό. Αυτός είναι ο λόγος για τον οποίο δεν επιτρέπονται διπλά κλειδιά στο HashMap. Αλλά το κλειδί για κάθε είσοδο του χάρτη μπορεί να έχει διαφορετικό τύπο, δηλαδή τα κλειδιά στο χάρτη που δημιουργείται από το HashMap μπορεί να είναι ετερογενή. Η δομή δεδομένων που χρησιμοποιείται από το HashMap για την αποθήκευση ενός χάρτη είναι ένας πίνακας κατακερματισμού.

Η σειρά εισαγωγής των καταχωρήσεων στο HashMap δεν διατηρείται. Η εισαγωγή καταχωρήσεων στο χάρτη που δημιουργήθηκε χρησιμοποιώντας το HashMap βασίζεται στον κωδικό κατακερματισμού που υπολογίζεται από τα πλήκτρα στις καταχωρήσεις. Αν κατά λάθος εισάγετε ένα διπλό κλειδί στο HashMap, θα αντικαταστήσει την προηγούμενη τιμή αυτού του κλειδιού με τη νέα προτεινόμενη τιμή και θα επιστρέψει την παλιά τιμή. Εάν δεν χρησιμοποιείται κανένα διπλό κλειδί και δεν υπάρχει αντικατάσταση, το κλειδί επιστρέφει πάντα το Null. Ας δούμε πώς να προσθέσουμε τις καταχωρήσεις στο χάρτη κατακερματισμού με το ακόλουθο παράδειγμα.

 Hashmap hm = νέος χάρτης Hash (); hm.put ("Ajay", 275). hm.put ("Vijay", 250). hm.put ("Jonny", 150). hm.put ("Ιορδανία", 200). System.out.println (hm); / * εξόδου * / {Vijay = 250, Jonny = 150, Ajay = 275, Ιορδανία = 200} 

Όπως και στον παραπάνω κώδικα, μπορείτε να δείτε ότι δημιούργησα ένα αντικείμενο του HashMap και πρόσθεσα τις καταχωρήσεις χρησιμοποιώντας την μέθοδο puts και όταν έγραψα το αντικείμενο HashMap, οι καταχωρήσεις δεν εκτυπώνονται με τη σειρά που είχαν εισαχθεί. Ως εκ τούτου, δεν μπορείτε να προσποιηθείτε ότι η σειρά των καταχωρήσεων στο HashMap θα επιστρέψει. Το HashMap χρησιμοποιεί όλες τις μεθόδους της διεπαφής χάρτη και της κατηγορίας AbstractMap και δεν εισάγει καμία νέα μέθοδο. έχει τους κατασκευαστές της. Η προεπιλεγμένη χωρητικότητα του χάρτη κατακερματισμού είναι 16 και ο λόγος πληρωμής είναι 0.75 .

Ορισμός του LinkedHashMap

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

Εκτός από τις μεθόδους που κληρονομούνται από το HashMap, το LinkedHashMap εισάγει μια νέα μέθοδο που είναι removeEldestEntry () . Αυτή η μέθοδος χρησιμοποιείται για την κατάργηση της παλαιότερης καταχώρησης στον χάρτη. Η προεπιλεγμένη χωρητικότητα του LinkedHashMap είναι 16 και ο προεπιλεγμένος λόγος πλήρωσης είναι 0, 75 ο οποίος είναι παρόμοιος με την κλάση HashMap.

Βασικές διαφορές μεταξύ του HashMap και του LinkedHashMap στην Java

  1. Η πιο σημαντική διαφορά είναι ότι η σειρά εισαγωγής του HashMap δεν διατηρείται, ενώ διατηρείται η σειρά εισαγωγής του LinkedHashMap.
  2. Η δομή δεδομένων που χρησιμοποιείται από το HashMap για την αποθήκευση των στοιχείων του χάρτη είναι Hashtable . Από την άλλη πλευρά, η δομή δεδομένων που χρησιμοποιείται από το LinkedHashMap είναι Linked list και Hashtable .
  3. Η κλάση HashMap επεκτείνει την κλάση AbstractMap και υλοποιεί τη διεπαφή χάρτη . Ωστόσο, η κλάση LinkedHashMap είναι μια τάξη παιδιού της τάξης HashMap, δηλαδή η κλάση LinkedHashMap επεκτείνει την κλάση HashMap.
  4. Η κατηγορία HashMap εισήχθη στην έκδοση JDK 2.0 . Η κλάση LinkedHashMap εισήχθη αργότερα σε έκδοση JDK 4.0 .
  5. Συγκριτικά, η κλάση LinkedHashMap έχει περισσότερες δαπάνες από το HashMap καθώς πρέπει να διατηρεί τη σειρά των στοιχείων που έχουν εισαχθεί στο χάρτη.

Συμπέρασμα:

Το LinkedHashMap πρέπει να χρησιμοποιείται μόνο όταν ανησυχούμε για την ακολουθία των στοιχείων που έχουν εισαχθεί στο χάρτη.

Top