Différence entre Dictionnaire et Hashtable

Anonim

Dictionnaire vs Hashtable

Le dictionnaire est dactylographié (les types de valeur n'ont pas besoin d'être superposé) les types de valeurs ont besoin d'être gérés). Hashtable a une meilleure façon d'avoir une valeur que le dictionnaire IMHO, car il sait toujours que la valeur est un objet. Par conséquent, si vous utilisez. NET 3. 5, il est facile d'écrire une méthode d'extensiom pour le dictionnaire pour obtenir un comportement similaire.

La classe Hashtable est un type spécifique de la classe dictionary qui utilise une valeur entière (appelée hash) pour faciliter le stockage de ses clés. La classe Hashtable utilise le hash pour accélérer la recherche d'une clé spécifique dans la bibliothèque. Chaque objet dans. NET dérive de la classe d'objet. Cette classe prend en charge la méthode GetHash, qui renvoie un entier qui identifie de façon unique l'objet. La classe Hashtable est une technologie très efficace en général. Le seul problème avec la classe Hashtable est qu'il nécessite un peu d'overhead, et pour de petites fonctionnalités (moins de dix éléments), l'overhead peut nuire à la perfomance.

Il y a une plus grande différence entre un HashTable et un Dictionary. Si vous utilisez indexeurs pour obtenir une valeur d'un HashTable, le HashTable renverra avec succès null pour un élément inexistant, alors que le dictionnaire se lancera dans un errowr si vous essayez d'accéder à un élément en utilisant un indexer qui n'existe pas dans le dictionnaire.

Le HashTable est la classe de base qui est faiblement typée; la classe abstraite DictionaryBase est typée et utilise en interne un HashTable.

Une chose étrange constatée sur Dictionnaire est, quand nous ajoutons les entrées multiples dans le dictionnaire, le plus dans lequel les entrées sont ajoutées est maintenu. Ainsi, si vous appliquez une recherche sur le dictionnaire, vous obtiendrez les recommandations dans le même ou vous les avez insérés. Bien que cela ne soit pas vrai avec HashTable, lorsque vous ajoutez les mêmes recommandations dans Hashtable, la commande n'est pas maintenue. Si "Dictionnaire est basé sur Hashtable" est vrai, pourquoi Dictionnaire maintient le plus mais HashTable ne fait pas?

Comme pour leur comportement différent, c'est parce que Generic Dictionary implémente une hashtable, mais n'est pas basé sur System. Connections. Hashtable. La mise en œuvre du dictionnaire générique est basée sur l'attribution de paires valeur-clé à partir d'une liste. Ceux-ci sont ensuite indexés avec les compartiments de table de hachage pour l'accès random, mais quand il renvoie un énumérateur, il marche juste la liste en ordre séquentiel - qui sera l'ordre d'insertion comme lus que les entrées ne sont pas réutilisées.