Dictionnaire vs Hashtable
Le dictionnaire est dactylographié (certains types de valeur n´ont pas besoin dexpression), pas une table de hachage n´est pas (les types de valeur ont besoin dexécution). Hashtable a une manière plus agréable d’obtenir une valeur que le dictionnaire IMHО, car il sait toujours que la valeur est un objet. Même si vous utilisez .NET 3.5, il est facile d’écrire un dictionnaire complet pour obtenir un comportement similaire..
La classe Hashtable est un type spécifique de classe de dictionnaire qui utilise une valeur entière (appelée hachage) pour faciliter le stockage de ses clés. La classe Hashtable utilise le hachage pour accélérer la recherche d'une clé spécifique dans la liste. Chaque objet dans .NET dérive de la classe Оbject. Cette classe prend en charge la méthode GetHash, qui renvoie un entier identifiant de manière unique l'objet. La classe Hashtable est une fonctionnalité très efficace en général. Le seul problème avec la classe Hashtable est qu’elle nécessite un peu de tête, et pour de petits problèmes (moins de dix éléments), la tête peut nuire à la performance..
Il existe une différence plus importante entre un HashTable et un dictionnaire. Si vous utilisez des indexeurs pour obtenir une valeur d'une table de hachage, la table de hachage renverra avec succès la valeur null pour un élément non existant, alors que le dictionnaire passera à une erreur si vous essayez d'accéder à un élément à l'aide d'un indexeur qui n'existe pas dans le dictionnaire..
HashTable est la classe de base faiblement typée. la classe abstraite DictionaryBase est typée et utilise en interne une table de hachage.
Une chose étrange remarquée à propos de Dictionary est que, lorsque nous ajoutons les entrées multiples dans Dictionary, l’ordre dans lequel les entrées sont ajoutées est conservé. Ainsi, si vous appliquez une recherche dans le dictionnaire, vous obtiendrez les dossiers dans le même ordre que vous les avez insérés. Tandis que ceci n’est pas vrai avec HashTable normal, lorsque vous ajoutez les mêmes enregistrements dans Hashtable, l’ordre n’est pas maintenu. Si 'Dictionary est basé sur Hashtable' est vrai, pourquoi Dictionary conserve l'ordre, mais HashTable ne le fait pas?
Pourquoi ils se comportent différemment, c'est parce que Generic Dictionary implémente une table de hachage, mais n'est pas basé sur System.Cоllectiоns.Hashtable. L'implémentation du dictionnaire générique est basée sur l'allocation de paires clé-valeur d'une liste. Ceux-ci sont ensuite indexés avec les compartiments de hachage pour un accès aléatoire, mais quand il renvoie un énumération, il fait simplement défiler la liste en ordre séquentiel - ce qui sera le dernier ordre d'insertion, car les entrées ne sont pas réutilisées..