SortedSet<T> vs HashSet<T>

C#.NetCollectionsGenerics

C# Problem Overview


My question is that what is the need of HashSet<T> when we have SortedSet<T>! All HashSet's methods are available in SortedSet too, moreover SortedSet is advantageous as it provides collection already in sorted manner! Even then HashSet is present. For what is it useful then?

C# Solutions


Solution 1 - C#

If you don't need sorting, you shouldn't use a class that does sorting because that means your application will be doing more work than it needs to. (It will make your app faster, in other words).

Solution 2 - C#

This is about choosing the right tool for the job. Depends on the way you are going to use your collection.

This page has a nice table detailing the differences between various collection classes.

Below is an extract from that table concerning the collections you are asking about:

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)

Solution 3 - C#

Both HashSet<T> and SortedSet<T> are implementing interface ISet<T> which is a data structure holding unique elements.

The main difference between them is the underlying data structure they use to store data. HashSet<T> uses a hash-table while SortedSet<T> uses a red-black tree which is a balanced binary tree.

The HashSet<T> which uses a hash table does the basic operations (i.e. Add, Remove, Search) faster than SortedSet<T> as the complexity of HashSet<T> is O(1) meaning it will do basic operations independent of the size of input data in a constant period of time while the complexity of SortedSet<T> is log(N) meaning depend on the size of input it will do the basic operations logarithmic. for example if the size of your input data is 1,000 then then the program does the basic operations in 10 steps and if it is 1,000,000 the program does the basic operations in 20 steps.

Conclusion: Use HashSet<T> if you don't need the elements to be sorted otherwise use SortedSet<T>. It means Using HashSet<T> is preferable unless you need sorting.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBatrickparryView Question on Stackoverflow
Solution 1 - C#JacobView Answer on Stackoverflow
Solution 2 - C#Zar ShardanView Answer on Stackoverflow
Solution 3 - C#Behnam MirzabeygiView Answer on Stackoverflow