HashSet C#HashSet数据结构是在.NET Framework 3.5中引入的.可以在HashSet MSDN页面上找到已实现成员的完整列表.
kam*_*aci 601
集合有不同的实现.有些通过散列元素使插入和查找操作超快.但是,这意味着添加元素的顺序将丢失.其他实现以较慢的运行时间为代价来保留添加的顺序.
HashSet
C#中的类用于第一种方法,因此不保留元素的顺序.它比常规快得多List
.一些基本的基准测试表明,在处理主要类型(int,double,bool等)时,HashSet的速度要快得多.使用类对象时速度要快得多.所以关键是HashSet很快.
唯一的问题HashSet
是指数无法进入.要访问元素,您可以使用枚举器或使用内置函数将其转换HashSet
为a List
并迭代它.看看这里
k r*_*rey 11
A HashSet
具有内部结构(哈希),可以快速搜索和识别项目.缺点是迭代HashSet
(或通过索引获取项目)相当慢.
那么为什么有人想要知道一个条目中是否已存在一个条目?
a HashSet
有用的一种情况是从可能存在重复项的列表中获取不同的值.将项目添加到项目后HashSet
,可以快速确定项目是否存在(Contains
操作员).
另一优点HashSet
是设置操作: IntersectWith
,IsSubsetOf
,IsSupersetOf
,Overlaps
,SymmetricExceptWith
,UnionWith
.
如果您熟悉对象约束语言,那么您将识别这些设置操作.您还将看到它距离可执行UML的实现更近了一步.
简单地说,并且没有透露厨房秘密:
一般来说,集合是一个不包含重复元素的集合,其元素没有特定的顺序.因此,A HashSet<T>
类似于通用List<T>
,但是针对丢失订单而优化用于快速查找(通过哈希表,顾名思义).