2011-01-07 24 views
34

Meine Frage ist, was ist der Bedarf von HashSet<T>, wenn wir SortedSet<T> haben! Alle Methoden von HashSet sind auch in SortedSet verfügbar, außerdem ist SortedSet vorteilhaft, da es die Sammlung bereits sortiert bereitstellt! Auch dann ist HashSet vorhanden. Für was ist es dann nützlich?SortedSet <T> vs HashSet <T>

+4

Was ist, wenn Sie haben eine Reihe von Dingen, die nicht über eine Wohlordnung in erster Linie haben? Wie würdest du zum Beispiel eine * sortierte * Menge von Punkten in drei Räumen machen? Was würdest du sortieren? –

+1

auf Tuple.Create (x, y, z) :) – Grozz

+1

HashSet Wenn Sie möchten, dass Elemente unsortiert und einzigartig sind? Von MSDN> Die HashSet Klasse bietet > Hochleistungs-Set-Operationen. Eine Menge > ist eine Sammlung, die keine > doppelte Elemente enthält und deren Elemente > in keiner bestimmten Reihenfolge sind. http://msdn.microsoft.com/en-us/library/bb359438.aspx – OnesimusUnbound

Antwort

52

Wenn Sie keine Sortierung benötigen, sollten Sie keine Sortierklasse verwenden, da dies bedeutet, dass Ihre Anwendung mehr Arbeit leistet als benötigt wird. (Es wird Ihre App schneller machen, mit anderen Worten).

+6

Noch wichtiger, der Algorithmus wird schneller ausgeführt. Hashing ist O (1), wohingegen die sortierte Menge wahrscheinlich einen binären Suchbaum verwendet, der im Durchschnitt O (log n) ist - eine weitaus schlechtere Leistung. –

+0

In diesem Fall können wir die Liste verwenden, nicht wahr? Warum brauchen HashSet ? – Batrickparry

+13

Set für eindeutige Elemente, Liste kann doppelte Einträge enthalten. http://msdn.microsoft.com/en-us/library/bb359438.aspx für die HashSet Dokumentation. Es heißt: Eine Menge ist eine Sammlung, die _ keine doppelten Elemente_ enthält und deren Elemente keine bestimmte Reihenfolge haben. – OnesimusUnbound

36

Hier geht es darum, das richtige Werkzeug für den Job zu wählen. Das hängt davon ab, wie Sie Ihre Sammlung verwenden.

This page hat eine schöne Tabelle mit den Unterschieden zwischen den verschiedenen Klassen.

Im Folgenden ein Auszug aus dieser Tabelle die Sammlungen über Sie fragen nach:

 
Collection Ordering Contiguous Storage? Direct Access? Lookup Efficiency Manipulate Efficiency 
SortedSet Sorted   No    Via Key    Key:O(log n)   O(log n)    
HashSet  Unordered  Yes    Via Key    Key:O(1)    O(1) 
Verwandte Themen