HashSet 类
定义
命名空间: System.Collections.Generic
程序集: System.Collections.dll
类型参数
T(哈希集中的元素类型)
注释
类 HashSet
元素唯一,不重复,区分大小写
不能使用下标来访问元素(for循环不可使用)
备注:
HashSetIReadOnlyCollection 实现从 .NET Framework 4.6 开始的 接口;在早期版本的 .NET Framework中HashSet , 类未实现此接口。
HashSet
HashSet
集合HashSet
HashSet
HashSet 操作 | 数学等效项 |
---|---|
UnionWith | 联合或集添加 |
IntersectWith | 交叉 口 |
ExceptWith | 设置减法 |
SymmetricExceptWith | 对称差异 |
仅.NET Framework: 对于非常大HashSet
从 .NET Framework 4 开始, HashSet
HashSet 和 LINQ Set 运算
LINQ 集操作和 HashSet
HashSet 操作 | LINQ 等效项 |
---|---|
UnionWith | Union |
IntersectWith | Intersect |
ExceptWith | Except |
未提供。 | Distinct |
SymmetricExceptWith | 未提供。 |
Overlaps | 未提供。 |
IsSubsetOf | 未提供。 |
IsProperSubsetOf | 未提供。 |
IsSupersetOf | 未提供。 |
IsProperSupersetOf | 未提供。 |
SetEquals | 未提供。 |
HashSet 的优势和与 List 的比较
HashSet
在内部算法实现上,HashSet
这里的方法复杂度就是 时间复杂度 和 空间复杂度 的综合评定,时间复杂度 和 空间复杂度怎么定义,可以百度一下,这里不做讲解
所以在集合的目的是为了检索的情况下,我们应该使用 HashSet
代码展示
#region 添加元素
Console.WriteLine("1. 添加元素 \r\n ");
var set = new HashSet<string>();
// Add 方法会返回 bool值,添加数据时,如果集合中已经存在,则忽略这次操作,并返回false
// 无法添加不同数据类型的元素
// set.Add(8);
set.Add("a");
set.Add("b");
set.Add("c");
set.Add("d");
set.Add("A");
FHashSet(set); // 打印元素
SignLine(); // 分割线
#endregion
#region 检查元素是否存在
Console.WriteLine("2. 集合中是否存在 a 元素?");
if (set.Contains("a"))
Console.WriteLine("是");
else
Console.WriteLine("否");
SignLine();
#endregion
#region 将当前集合的容量设置为它包含的实际元素数
Console.WriteLine("将当前集合的容量设置为它包含的实际元素数: \r\n");
var set2 = new HashSet<string>(10);
set2.Add("A");
set2.Add("B");
set2.Add("C");
set2.TrimExcess();
SignLine();
#endregion
#region 移除当前集合中包含指定集合的元素
Console.WriteLine("移除当前集合中包含指定集合的元素: \r\n");
string[] strs = { "a", "b" };
set.ExceptWith(strs);
FHashSet(set2);
SignLine();
#endregion
#region 修改为两个集合之间的交集
Console.WriteLine("修改为两个集合之间的交集: \r\n");
string[] str2 = { "异", "A", "B", "C", "E", "E" };
set.IntersectWith(str2);
FHashSet(set);
SignLine();
#endregion
#region 修改为两个集合之间的并集
Console.WriteLine(" 6.修改为两个集合之间的并集: \r\n");
Console.WriteLine(" set : A, B, C, E, D 长度:{0}", set.Count);
Console.WriteLine(" set2: 1, A, 2, B 长度:{0}", set2.Count);
set.UnionWith(set2);
FHashSet(set);
#endregion
结果: