System.Collections.Generic.HashSet<T> 类

本文提供了此 API 参考文档的补充说明。

HashSet<T> 类提供高性能集合运算。 集是一个集合,其中包含不重复的元素,并且其元素没有特定顺序。

对象的容量 HashSet<T> 是对象可以保存的元素数。 随着 HashSet<T> 元素添加到对象中,对象的容量会自动增加。

HashSet<T>类基于数学集的模型,并提供类似于访问Dictionary<TKey,TValue>Hashtable集合键的高性能集合操作。 简单而言, HashSet<T> 类可以视为 Dictionary<TKey,TValue> 没有值的集合。

HashSet<T>集合未排序,并且不能包含重复的元素。 如果顺序或元素重复比应用程序的性能更重要,请考虑将 List<T> 类与 Sort 该方法一起使用。

HashSet<T> 提供许多数学集运算,例如集加法(联合)和集减法。 下表列出了提供的 HashSet<T> 运算及其数学等效项。

HashSet 操作 数学等效项
UnionWith 并集或集合加法
IntersectWith 路口
ExceptWith 集合减法
SymmetricExceptWith 对称差异

除了列出的集作之外, HashSet<T> 该类还提供用于确定集相等性、重叠集以及集是另一组的子集还是超集的方法。

仅限 .NET Framework:对于非常大HashSet<T>的对象,可以通过将配置元素的属性enabled设置为<gcAllowVeryLargeObjects>true在运行时环境中,将 64 位系统上的最大容量增加到 20 亿个元素。

HashSet<T> 类实现 ISet<T> 接口。

HashSet 和 LINQ 集合运算

LINQ 提供对任何实现 DistinctUnion 接口的数据源的 IntersectExceptIEnumerableIQueryable 集合操作的访问。 HashSet<T> 提供更大和更强大的集合操作集。 例如, HashSet<T> 提供比较,例如 IsSubsetOfIsSupersetOf

LINQ 集作和 HashSet<T> 作之间的主要区别是 LINQ 集作始终返回新 IEnumerable<T> 集合,而 HashSet<T> 等效方法修改当前集合。

通常,如果必须创建新集,或者应用程序只需要访问提供的集作,则对任何集合或数组使用 LINQ 集作 IEnumerable<T> 将足够。 但是,如果应用程序需要访问额外的集合操作,或者不需要创建新集合,请使用HashSet<T> 类。

下表显示了 HashSet<T> 操作及其等价的 LINQ 集合操作。

HashSet 操作 LINQ 等效项
UnionWith Union
IntersectWith Intersect
ExceptWith Except
未提供。 Distinct
SymmetricExceptWith 未提供。
Overlaps 未提供。
IsSubsetOf 未提供。
IsProperSubsetOf 未提供。
IsSupersetOf 未提供。
IsProperSupersetOf 未提供。
SetEquals 未提供。