292 votes

.NET HashTable Vs Dictionnaire la Dictionnaire être aussi rapide?

Je suis à essayer de comprendre quand et pourquoi utiliser un Dictionnaire ou une table de hachage. J'ai fait un peu de recherche sur ici et d'avoir trouvé des gens parler sur le générique avantages du Dictionnaire qui je suis totalement d'accord avec, ce qui conduit le boxing et unboxing avantage pour un léger gain de performance.

Mais j'ai aussi lu le Dictionnaire ne sera pas toujours de retourner les objets dans l'ordre où ils sont insérés, chose qu'il est trié. Où, comme une table de hachage. Comme je comprends ce qui conduit à la table de hachage étant beaucoup plus rapide pour certaines situations.

Ma question est vraiment, ce sont ces situations? Suis-je en tort dans mes hypothèses ci-dessus? Quelles sont les situations que vous pouvez utiliser pour choisir l'un au dessus de l'autre, (oui le dernier est un peu ambigu).

315voto

Mehrdad Afshari Points 204872

System.Collections.Generic.Dictionary<TKey, TValue> et System.Collections.Hashtable classes à la fois de maintenir une table de hachage de la structure de données interne. Aucun d'entre eux garantissent la préservation de l'ordre des éléments.

Laissant boxing/unboxing problèmes mis à part, la plupart du temps, ils doivent avoir très similaire à la performance.

La principale différence structurelle entre eux, c'est qu' Dictionary s'appuie sur le chaînage (maintien d'une liste d'articles pour chaque table de hachage seau) pour résoudre les collisions alors que Hashtable utilise la redéfinition de résolution de collision (lorsqu'une collision se produit, essaie une autre fonction de hachage à la carte, la clé d'un seau).

Il y a peu d'avantages à utiliser Hashtable classe si vous visez pour .NET Framework 2.0+. C'est effectivement rendu obsolète par l' Dictionary<TKey, TValue>.

130voto

Abdul Munim Points 9039

Je suppose que cela ne signifie rien pour vous maintenant. Mais juste pour la référence, pour les gens arrêter par

Test de Performance - SortedList vs SortedDictionary vs Dictionnaire vs Hashtable

25voto

Steven Points 361

Une autre différence importante est que le type Hashtable prend en charge sans verrouillage de plusieurs lecteurs, et un seul écrivain en même temps, tandis que le Dictionnaire ne fonctionne pas.

18voto

Article MSDN: "Le Dictionnaire de la classe a la même fonctionnalité que la classe Hashtable. Un Dictionnaire d'un type spécifique (autre que l'Objet) a de meilleures performances que d'une table de hachage pour les types de valeur parce que les éléments de la table de hachage sont de type Objet et, par conséquent, boxing et unboxing généralement se produire si le stockage ou la récupération d'un type de valeur". Lien: http://msdn.microsoft.com/en-us/library/4yh14awz(v=vs. 90).aspx

11voto

Adam Luter Points 1043

Les deux sont en effet de la même classe (vous pouvez regarder le démontage). Table de hachage a été créé en premier avant .Net avait génériques. Dictionnaire, en revanche, est une classe générique et vous donne un typage fort des avantages. Je n'aurais jamais utiliser la table de hachage depuis Dictionnaire ne vous coûte rien à utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X