HashSet versus Dictionary sans rechercher le moment où un élément existe

HashSet t = new HashSet(); // add 10 million items Dictionary t = new Dictionary(); // add 10 million items. 

Dont la méthode .Contains reviendra plus vite?

Juste pour clarifier, mon exigence est d’avoir 10 millions d’objects (enfin, des chaînes de caractères vraiment) dont j’ai besoin pour vérifier s’ils existent dans la structure de données. Je ne vais jamais parcourir.

Test de performance HashSet vs List vs Dictionary, pris ici .

Ajouter des objects 1000000 (sans vérifier les doublons)

Contient un chèque pour la moitié des objects d’une collection de 10000

Supprimer la moitié des objects d’une collection de 10000

Je suppose que vous voulez dire Dictionary dans le second cas? HashTable est une classe non générique.

Vous devez choisir la bonne collection pour le travail en fonction de vos besoins réels. Voulez-vous réellement mapper chaque clé à une valeur? Si oui, utilisez Dictionary<,> . Si vous ne vous souciez que de cela, utilisez HashSet<> .

Je m’attendrais à ce que HashSet.Contains et Dictionary.ContainsKey (qui sont des opérations comparables, en supposant que vous utilisiez votre dictionnaire de manière judicieuse) soient fondamentalement identiques – ils utilisent fondamentalement le même algorithme. Je suppose qu’avec les entrées de Dictionary<,> étant plus grandes, vous avez plus de chances de faire sauter le cache avec Dictionary<,> qu’avec HashSet<> , mais je m’attendrais à ce que cela soit insignifiant par rapport au choix du mauvais type de données simplement en termes de ce que vous essayez de réaliser.

Ce sont des structures de données différentes. Il n’y a pas non plus de version générique de HashTable .

HashSet contient des valeurs de type T dont HashTable (ou Dictionary ) contient des paires clé-valeur. Vous devez donc choisir la collecte des données à stocker.

De la documentation MSDN pour Dictionary

“La récupération d’une valeur à l’aide de sa clé est très rapide, proche de O (1) , car la classe Dictionary est implémentée comme une table de hachage.

Avec une note:

“La vitesse de récupération dépend de la qualité de l’algorithme de hachage du type spécifié pour TKey”

Je sais que votre question / message est vieux – mais en cherchant une réponse à une question similaire, je suis tombé sur cela.

J’espère que cela t’aides. Faites défiler jusqu’à la section Remarques pour plus de détails. https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx