HashSet .NET Framework 3.5中引入了C#HashSet数据结构。可以在HashSet MSDN页面上找到已实现成员的完整列表。
- 在哪里使用?
- 您为什么要使用它?
HashSet .NET Framework 3.5中引入了C#HashSet数据结构。可以在HashSet MSDN页面上找到已实现成员的完整列表。
Answers:
集合有不同的实现。有些通过散列元素使插入和查找操作变得超级快。但是,这意味着添加元素的顺序丢失了。其他实现则以增加的运行时间为代价来保留添加的订单。
HashSet
C#中的类采用第一种方法,因此不保留元素的顺序。它比常规的要快得多List
。一些基本的基准测试表明,在处理主要类型(int,double,bool等)时,HashSet的速度更快。使用类对象时,它快得多。这就是说HashSet很快。
唯一HashSet
要注意的是索引无法访问。要访问元素,您可以使用枚举器,也可以使用内置函数将转换HashSet
为,List
然后进行迭代。在这里看看
阿HashSet
具有内部结构(散列),其中物品可以被搜索,并迅速识别。缺点是迭代HashSet
(或通过索引获取项目)相当慢。
那么,为什么有人想要知道某个条目是否已经存在于集合中?
a HashSet
有用的一种情况是从可能存在重复项的列表中获取不同的值。将项目添加到后,即可HashSet
快速确定该项目是否存在(Contains
运算符)。
另一优点HashSet
是设置操作: IntersectWith
,IsSubsetOf
,IsSupersetOf
,Overlaps
,SymmetricExceptWith
,UnionWith
。
如果您熟悉对象约束语言,那么您将识别这些设置操作。您还将看到,它距离可执行UML的实现又近了一步。
从应用程序的角度来看,如果只需要避免重复,那么HashSet
您要查找的是因为它是Lookup,Insert和Remove 复杂度为O(1)-常量。这意味着无论有多少个元素HashSet
都将花费相同的时间来检查是否有这样的元素,再加上您在O(1)处插入元素也使其非常适合此类事情。