SortedSet的 vs HashSet

问题描述 投票:40回答:3

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

c# .net collections generics
3个回答
69
投票

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


43
投票

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

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)

4
投票

HashSet和SortedSet都在实现数据结构集(),这是一个包含唯一元素的数据结构。

它们之间的主要区别在于它们用于存储数据的基础数据结构。 HashSet使用散列表,而SortedSet使用红黑树,这是一个平衡的二叉树。

使用哈希表的HashSet比SortedSet更快地执行基本操作(即添加,删除,搜索),因为HashSet的复杂度为O(1),这意味着它将在恒定的周期内执行与输入数据大小无关的基本操作。时间,而SortedSet的复杂性是log(N)意味着取决于输入的大小,它将执行基本操作对数。例如,如果输入数据的大小为1,000,那么程序将以10个步骤执行基本操作,如果是1,000,000,程序将以20个步骤执行基本操作。

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

© www.soinside.com 2019 - 2024. All rights reserved.