SortedSet<T> vs HashSet<T>
Ma question est quel est le besoin de HashSet<T>
lorsque nous avons SortedSet<T>
! Tous les HashSet méthodes sont disponibles dans SortedSet trop, d'ailleurs SortedSet est avantageux car il fournit une collection déjà triés manière! Même alors, HashSet est présent. Pour quoi est-il utile alors?
- HashSet<T> si vous voulez que les éléments soient triés et unique? À partir de MSDN > Le HashSet<T> classe > de haute performance de l'ensemble des opérations. Un set > est une collection qui ne contient pas de > les éléments en double, et dont les éléments > sont dans aucun ordre particulier. msdn.microsoft.com/en-us/library/bb359438.aspx
- Que faire si vous avez un ensemble de choses qui n'ont pas une commande en premier lieu? Comment voulez-vous faire une triés ensemble de points dans trois espaces, par exemple? Que voulez-vous trier?
- sur n-uplet.Créer(x, y, z) 🙂
- Un utile (parfois) chose à savoir lorsque l'on travaille avec
HashSet<T>
: même dans les applications 64 bits, il peut stocker jusqu'à près de 48 millions deGuid
s oulong
s ou ~95 millions deint
s, et jetteOutOfMemoryException
après.SortedSet<T>
semble avoir beaucoup plus de limite de capacité. Si pour une raison quelconque vous avez besoin de garder des centaines de millions d'objets en mémoire,HashSet<T>
peut-être pas un bon choix.
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas besoin de tri, vous ne devriez pas utiliser une classe qui fait le tri, car cela signifie que votre application va faire plus de travail que nécessaire. (Il va rendre votre application plus rapide, en d'autres termes).
O(1)
signifie qu'il fonctionne dans le même laps de temps, quelle que soit la taille de l'entrée. Sinon, le temps dépend de la taille de l'entrée den
et est exprimée comme une fonction den
. par exemple, linéaire:O(n)
, quadratique:O(n^2)
, etc. Le big-O page wiki peut être un dur à lire, ceci on résume bien je pense.SortedSet<>
effectue des recherches en O(log n) temps, unHashSet<>
en O(1) fois, et unList<>
en O(n) fois.C'est sur le choix du bon outil pour le travail. Dépend de la façon dont vous allez vous servir de votre collection.
Cette page a un beau tableau détaillant les différences entre les diverses classes de collection.
Ci-dessous un extrait de ce tableau concernant les collections que vous posez sur:
Dictionary<TKey,TValue>
etHashSet<T>
) comme "contigu" - mais ils ne stockent pas leurs clés de manière contiguë en interne (c'est à dire souvent rare) touche de baies, tandis queSortedDictionary
etSortedSet
utiliser une densité d'arbres, donc je suis surpris que l'article n'est pas tactile sur l'utilisation de la mémoire de SortedSet vs HashSet pour différents nombres de touches.Les deux HashSet et SortedSet sont la mise en œuvre de la structure de données définie ) qui est une structure de données de la tenue des éléments uniques.
La principale différence entre eux est la structure de données qu'ils utilisent pour stocker des données.
HashSet utilise un table de hachage tout SortedSet utilise un rouge-noir arbre qui est un arbre binaire équilibré.
Le HashSet qui utilise une table de hachage ne les opérations de base (c'est à dire Ajouter, Supprimer, Rechercher) plus rapide que SortedSet que la complexité de HashSet est O(1) signifie qu'elle va faire des opérations de base indépendante de la taille de l'entrée de données dans une constante de la période de temps pendant que la complexité de SortedSet est log(N) la signification dépend de la taille de l'entrée, il va faire les opérations de base logarithmique. par exemple, si la taille de vos données d'entrée est de 1 000 puis ensuite, le programme effectue les opérations de base en 10 étapes et si il est de 1 000 000 le programme effectue les opérations de base en 20 étapes.
Conclusion: l'Utilisation HashSet si vous n'avez pas besoin des éléments à trier utiliser autrement SortedHash. Cela signifie en Utilisant HashSet est préférable sauf si vous avez besoin de tri.