Διαφορά μεταξύ λεξικού και Hashtable

Anonim

Λεξικό εναντίον Hashtable

Το δακτυλικό λεξικό είναι δακτυλογραφημένο (δεν είναι απαραίτητο) οι τύποι οικοτόπων χρειάζονται βόξινγκ). Το Hashtable έχει έναν καλύτερο τρόπο για να αποκτήσει αξία από το λεξικό IMHΟ, επειδή πάντα αναγνωρίζει ότι η τιμή είναι ένα στοιχείο. Τότε αν χρησιμοποιείτε. NET 3. 5, είναι εύκολο να γράψετε ένα εκτεταμένο μεθοδολογικό λεξικό για να πάρετε παρόμοια συμπεριφορά.

Η κλάση Hashtable είναι μια συγκεκριμένη κατηγορία λεξικού τύπου λεξικού που χρησιμοποιεί μια ακέραια τιμή (που ονομάζεται hash) για να βοηθήσει στην αποθήκευση των κλειδιών της. Η τάξη Hashtable χρησιμοποιεί το hash για να επιταχύνει την αναζήτηση για ένα συγκεκριμένο πλήκτρο στην συνομιλία. Κάθε αντικείμενο στο. NET προέρχεται από την κλάση Object. Αυτή η τάξη υποστηρίζει το GetHash method, το οποίο επιστρέφει έναν ακέραιο που προσδιορίζει με μοναδικό τρόπο το αντικείμενο. Η κατηγορία Hashtable είναι μια πολύ αποδοτική κοινωνία γενικά. Το μόνο ζήτημα με την τάξη Hashtable είναι ότι απαιτεί λίγη ορχήστρα, και για μικρές κοινωνίες (λιγότερα από δέκα στοιχεία) η υπεράσπιση μπορεί να εμποδίσει την εκτέλεση.

Υπάρχει μια πιο σημαντική διαφορά μεταξύ ενός HashTable και ενός Λεξικού. Εάν χρησιμοποιείτε τα ευρετήρια για να πάρετε μια τιμή από ένα HashTable, το HashTable θα επιστρέψει επιτυχώς null για ένα μη υπάρχον στοιχείο, ενώ το Λεξικό θα περάσει ένα λάθος εάν προσπαθήσετε να αποκτήσετε πρόσβαση σε ένα στοιχείο χρησιμοποιώντας ένα ευρετήριο που δεν υπάρχει στο λεξικό.

Το HashTable είναι η βασική κλάση που πληκτρολογείται ασθενώς. η αφηρημένη κλάση του DictionaryBase πληκτρολογείται strωnly και χρησιμοποιεί εσωτερικά ένα HashTable.

Ένα παράξενο πράγμα που παρατηρήσαμε είναι ότι, όταν προσθέτουμε τις πολλαπλές καταχωρήσεις στο Λεξικό, διατηρείται το πεδίο στο οποίο προστίθενται οι καταχωρήσεις. Επομένως, αν εφαρμόσετε ένα λεξιλόγιο στο Λεξικό, θα λάβετε τις αναφορές στην ίδια στήλη που έχετε εισάγει. Ενώ αυτό δεν είναι αληθές με το HashTable, όταν προσθέτετε τα ίδια αποτελέσματα στο Hashtable, το πρόγραμμα δεν διατηρείται. Αν το λεξικό βασίζεται στο Hashtable είναι αληθές, γιατί το λεξικό διατηρεί την εντολή αλλά το HashTable δεν είναι;

Ως προς το γιατί συμπεριφέρονται διαφορετικά, είναι επειδή το Generic Dictionary εφαρμόζει ένα hashtable, αλλά δεν βασίζεται στο Σύστημα. Κολλήσεις. Hashtable. Το γενικό λεξιλόγιο υλοποίησης βασίζεται σε όλα τα ζεύγη κλειδιών-τιμών από μια λίστα. Αυτά τότε ευρετηριάζονται με τους κατακερματισμένους κάδους για randоm πρόσβαση, αλλά όταν επιστρέφει ένα enumeratοr, περπατάει απλώς τον κατάλογο σε διαδοχική σειρά - που θα είναι ο αριθμός των εισαγωγών, όπως και οι καταχωρήσεις δεν επαναχρησιμοποιούνται.