Διαφορά μεταξύ του HashMap και του Hashtable στην Java
Περιεχόμενο
Το HashMap και το Hashtable, και οι δύο χρησιμοποιούνται για να αντιπροσωπεύσουν ένα ομάδα αντικειμένων που αντιπροσωπεύονται στο
Ας δούμε στο διάγραμμα σύγκρισης που φαίνεται παρακάτω για να μάθετε μερικές ακόμη διαφορές μεταξύ του HashMap και του Hashtable.
- Συγκριτικό διάγραμμα
- Ορισμός
- Βασικές διαφορές
- Ομοιότητες
- συμπέρασμα
Συγκριτικό διάγραμμα
Βάση σύγκρισης | HashMap | Hashtable |
---|---|---|
Εφαρμογή / Επέκταση | Η κλάση HashMap υλοποιεί τη διεπαφή χάρτη και επεκτείνει μια κλάση AbstractMap. | Το Hashtable επεκτείνει την κλάση του λεξικού Legacy, αλλά είναι ανασχεδιασμένο και τώρα υλοποιεί και το interface του Map. |
Συγχρονισμός | Το HashMap είναι ασύγχρονη και, ως εκ τούτου, το αντικείμενο HashMap δεν είναι ασφαλές με σπείρωμα. | Το Hashtable είναι συγχρονισμένο και ως εκ τούτου το αντικείμενο του Hashtable είναι ασφαλές για τα νήματα. |
Κλειδιά / Τιμή | Ένα κλειδί μπορεί να επιστρέψει το Null μόνο μία φορά, αλλά μια τιμή μπορεί να επιστρέψει το Null σε οποιοδήποτε χρονικό διάστημα. | Ένα κλειδί δεν μπορεί να επιστρέψει το Null καθώς χρησιμοποιείται για να αποκτήσει τον κωδικό κατακερματισμού που θα χρησιμοποιηθεί ως ευρετήριο του πίνακα hash, ούτε μια τιμή μπορεί να επιστρέψει Null. |
Προεπιλεγμένη αρχική χωρητικότητα | Η προεπιλεγμένη αρχική χωρητικότητα του HashMap είναι 16. | Η προεπιλεγμένη αρχική χωρητικότητα του Hashtable είναι 11. |
Τράβηγμα | Το HashMap διέρχεται από το Iterator. | Όπως και το Hashtable κατηγορίας χάρτη, δεν υποστηρίζει άμεσα το Iterator για το πέρασμα και ως εκ τούτου χρησιμοποιεί τον Enumerator. |
Ορισμός του HashMap
Το HashMap είναι μια κλάση που υλοποιεί το Χάρτης διεπαφή και επεκτείνει το AbstractMap Η κλάση χρησιμοποιεί τον πίνακα κατακερματισμού. Το αντικείμενο του HashMap αναφέρεται σε μια συλλογή / σύνολο / * K αντιπροσωπεύει το κλειδί και το V αντιπροσωπεύει την τιμή * / class HashMap Ο πρώτος κατασκευαστής είναι ένας προεπιλεγμένος κατασκευαστής που αρχικοποιεί ένα κενό αντικείμενο του HashMap με προεπιλεγμένη χωρητικότητα 16 και προεπιλεγμένη αναλογία φόρτωσης 0,75. Ο δεύτερος κατασκευαστής προετοιμάζει το χάρτη κατακερματισμού με την τιμή m. Ο τρίτος κατασκευαστής δημιουργεί ένα χάρτη κατακερματισμού με την αρχική χωρητικότητα που αντιστοιχεί στην τιμή που παρέχεται στο όρισμα "χωρητικότητα". Ο τέταρτος κατασκευαστής προετοιμάζει χάρτη κατακερματισμού με αναλογία χωρητικότητας και πλήρωσης που παρέχεται στις παραμέτρους. ας μάθουμε τώρα πώς να τροφοδοτήσουμε τις καταχωρήσεις σε ένα χάρτη κατακερματισμού. Hashmap hm = νέος χάρτης Hash (); hm.put ("Ajay", 275). hm.put ("Vijay", 250). hm.put ("Jonny", 150). hm.put ("Ιορδανία", 200). System.out.ln (hm); / * εξόδου * / {Vijay = 250, Jonny = 150, Ajay = 275, Ιορδανία = 200} Στον παραπάνω κώδικα, μπορείτε να δείτε ότι δημιούργησα ένα κενό αντικείμενο HashMap hm με προεπιλεγμένη αρχική χωρητικότητα και προεπιλεγμένη αναλογία πλήρωσης. Στη συνέχεια, εισήγαγα τέσσερις καταχωρίσεις στο χάρτη κατακερματισμού με τη χρήση της μεθόδου put (K, V) που χαρτογραφεί το κλειδί στην τιμή. Μπορείτε να παρατηρήσετε ότι οι καταχωρίσεις δεν εκτυπώνονται σε μια ακολουθία που τις τροφοδοτείτε επειδή η εντολή εισαγωγής δεν είναι σταθερή. Τώρα, εξετάστε μια υπόθεση που έχετε ήδη μια εγγραφή Το Hashtable είναι μια κλάση που επεκτείνει το Λεξικό τάξη που είναι μια κληρονομιά τάξη και ανασχεδιάζεται για την εφαρμογή του Χάρτης διεπαφή. Το Hashtable χρησιμοποιεί τον πίνακα κατακερματισμού ως δομή δεδομένων. Το Hashtable είναι παρόμοιο με το HashMap, καθώς και το αντικείμενο του Hashtable αναφέρεται στη συλλογή καταχωρήσεων όπου κάθε είσοδος είναι ένα ζευγάρι / * K καθορίζει το κλειδί και το V καθορίζει την τιμή που σχετίζεται με το κλειδί * / class Hashtable Στον παραπάνω κώδικα, ο πρώτος κατασκευαστής είναι ένας προεπιλεγμένος κατασκευαστής που δημιουργεί ένα κενό αντικείμενο μιας κατηγορίας Hashtable, το προεπιλεγμένο μέγεθος του είναι 11 και ο λόγος προεπιλεγμένης πληρότητας είναι 0,75. Ο δεύτερος κατασκευαστής δημιουργεί έναν πίνακα κατακερματισμού με το μέγεθος που αντιστοιχεί στην τιμή που παρέχεται στην παράμετρο "μέγεθος". Ο τρίτος κατασκευαστής δημιουργεί ένα πίνακα κατακερματισμού με αναλογία μεγέθους και πλήρωσης που παρέχεται στην παράμετρο. Ο τέταρτος κατασκευαστής προετοιμάζει τον πίνακα κατακερματισμού με την τιμή m. Ας μάθουμε τώρα πώς να εισαγάγουμε το Hashtable ht = νέο Hashtable (); ht.put (νέο hashCode (2), 275). ht.put (νέο hashCode (12), 250). ht.put (νέο hashCode (16), 150). ht.put (νέο hashCode (8), 200). System.out.ln (ht); / * εξόδου * / {12 = 250, 16 = 150, 2y = 275, 8 = 200} Στον παραπάνω κώδικα, δημιούργησα ένα κενό αντικείμενο του Hashtable και εισήγαγε τέσσερις καταχωρήσεις χρησιμοποιώντας τη μέθοδο put (). Μέθοδος εσωτερικής θέσης έχω καλέσει hashCode () που υπολογίζει και επιστρέφει την τιμή του κώδικα κατακερματισμού που θα ενεργήσει ως τιμή δείκτη για το αντικείμενο εισαγωγής. Όπως μπορείτε να δείτε, δεν αναφέρθηκα το μέγεθος του πίνακα hash, έτσι από προεπιλογή θα είναι 11. Εδώ επίσης, η σειρά εισαγωγής δεν διατηρείται και επομένως, όταν οι καταχωρήσεις ED δεν εμφανίζονταν διαδοχικά, τροφοδοτήθηκε. Το HashMap έχει καλύτερη απόδοση, καθώς τα αντικείμενα του είναι ασύγχρονα και πολλαπλά νήματα μπορούν να λειτουργούν σε αυτό ταυτόχρονα και ως εκ τούτου είναι ταχύτερη από το Hashtable.Ορισμός του Hashtable
Ομοιότητες:
Συμπέρασμα: