在 C# 中,集合是一种非常重要的数据结构,它用于存储一组唯一的元素。HashSet<T>
是一种基于哈希表的集合数据结构,它提供了高效的元素查找、添加和删除操作。HashSet<T>
是无序的,并且不允许重复的元素,这使得它在某些场景下非常有用。
创建 HashSet
要创建一个 HashSet
,您需要引入 System.Collections.Generic
命名空间:
using System.Collections.Generic;
// 创建一个空的 HashSet
HashSet<int> numbers = new HashSet<int>();
添加元素
使用 Add
方法向 HashSet
中添加元素:
namespace AppHashSet
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个空的 HashSet
HashSet<int> numbers = new HashSet<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 尝试添加重复的元素,将不会被添加到集合中
bool isAdded = numbers.Add(2); // 返回 false,因为 2 已经存在
// 输出numbers中的元素
foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}
}

删除元素
使用 Remove
方法从 HashSet
中删除元素:
bool isRemoved = numbers.Remove(2); // 返回 true,如果元素存在并且被移除
检查元素是否存在
使用 Contains
方法检查 HashSet
中是否包含某个元素:
bool contains = numbers.Contains(2); // 返回 false,因为 2 已经被移除
遍历 HashSet
使用 foreach
循环遍历 HashSet
中的元素:
foreach (int number in numbers)
{
Console.WriteLine(number);
}
HashSet 的操作
HashSet<T>
提供了一些强大的集合操作,例如并集、交集、差集和对称差集。
并集(Union)
namespace AppHashSet
{
internal class Program
{
static void Main(string[] args)
{
HashSet<int> setA = new HashSet<int> { 1, 2, 3 };
HashSet<int> setB = new HashSet<int> { 3, 4, 5 };
setA.UnionWith(setB); // setA 现在包含 { 1, 2, 3, 4, 5 }
// 输出结果
foreach (int num in setA)
{
Console.WriteLine(num);
}
}
}
}

交集(Intersect)
setA.IntersectWith(setB); // setA 现在包含 { 3 }
差集(Except)
setA.ExceptWith(setB); // setA 现在包含 { 1, 2 },因为这些元素在 setB 中不存在
对称差集(SymmetricExcept)
setA.SymmetricExceptWith(setB); // setA 现在包含 { 1, 2, 4, 5 },因为这些元素只在一个集合中存在

性能注意事项
HashSet<T>
在处理大量数据时通常比 List<T>
更高效,因为它使用哈希表来存储元素,这意味着它的添加、删除和查找操作的平均时间复杂度为 O(1)。然而,这种效率是以牺牲顺序和重复元素为代价的。
示例:使用 HashSet 过滤重复元素
假设我们有一个整数数组,我们想要移除所有重复的元素。
namespace AppHashSet
{
internal class Program
{
static void Main(string[] args)
{
int[] numbersArray = { 1, 2, 3, 2, 4, 5, 5, 6, 1 };
HashSet<int> uniqueNumbers = new HashSet<int>(numbersArray);
foreach (int number in uniqueNumbers)
{
Console.WriteLine(number);
}
}
}
}

在这个例子中,我们使用 HashSet
的构造函数直接从数组中创建了一个集合,自动移除了所有重复的元素。然后我们遍历这个集合,打印出唯一的元素。
总结
HashSet<T>
是 C# 中一个非常有用的集合类,适用于需要存储唯一元素集合的场景。它提供了丰富的集合操作方法,可以很方便地进行并集、交集、差集和对称差集等操作。在处理大量数据时,HashSet<T>
通常比其他集合类型更高效。通过上面的例子和说明,您应该对如何在 C# 中使用 HashSet
有了一定的了解。
阅读原文:原文链接
该文章在 2025/3/24 16:49:58 编辑过