SortedSet <t> vs HashSet <t> </t> </t>

时间:2011-01-07 05:23:14

标签: c# .net collections generics

我的问题是,当HashSet<T> SortedSet<T>时,{{1}}需要什么!所有HashSet的方法也可以在SortedSet中使用,而且SortedSet是有利的,因为它已经以排序的方式提供集合!即便如此,HashSet仍然存在。那么它有用呢?

3 个答案:

答案 0 :(得分:67)

如果您不需要排序,则不应使用进行排序的类,因为这意味着您的应用程序将执行超出其需要的更多工作。 (换句话说,它会让你的应用更快)。

答案 1 :(得分:42)

这是关于为工作选择合适的工具。取决于您将如何使用您的收藏。

This page有一个很好的表格,详细说明了各种集合类之间的差异。

以下是该表中有关您询问的收藏品的摘录:

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)

答案 2 :(得分:3)

HashSet SortedSet 都在实现数据结构集),该数据结构集包含唯一元素。

它们之间的主要区别是它们用于存储数据的基础数据结构。 HashSet使用哈希表,而SortedSet使用 red-back树,它是平衡的二叉树。

使用哈希表的HashSet进行基本操作(即添加,删除,搜索)的速度比SortedSet快,因为HashSet的复杂度为O(1),这意味着它将执行基本操作,而与输入数据的大小无关。固定时间段,而SortedSet的复杂度为log(N),这意味着它取决于输入的大小,它将对数地进行基本运算。例如,如果输入数据的大小为1,000,则程序将分10步执行基本操作;如果输入数据为1,000,000,则程序将分20步执行基本操作。

结论:如果不需要对元素进行排序,请使用HashSet ,否则请使用SortedHash。这意味着使用HashSet是首选,除非您需要排序。