在 C# 中,集合是一種非常重要的數(shù)據(jù)結(jié)構(gòu),它用于存儲(chǔ)一組唯一的元素。HashSet<T>
是一種基于哈希表的集合數(shù)據(jù)結(jié)構(gòu),它提供了高效的元素查找、添加和刪除操作。HashSet<T>
是無(wú)序的,并且不允許重復(fù)的元素,這使得它在某些場(chǎng)景下非常有用。
創(chuàng)建 HashSet
要?jiǎng)?chuàng)建一個(gè) HashSet
,您需要引入 System.Collections.Generic
命名空間:
using System.Collections.Generic;
// 創(chuàng)建一個(gè)空的 HashSet
HashSet<int> numbers = new HashSet<int>();
添加元素
使用 Add
方法向 HashSet
中添加元素:
namespace AppHashSet
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建一個(gè)空的 HashSet
HashSet<int> numbers = new HashSet<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 嘗試添加重復(fù)的元素,將不會(huì)被添加到集合中
bool isAdded = numbers.Add(2); // 返回 false,因?yàn)?2 已經(jīng)存在
// 輸出numbers中的元素
foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}
}

刪除元素
使用 Remove
方法從 HashSet
中刪除元素:
bool isRemoved = numbers.Remove(2); // 返回 true,如果元素存在并且被移除
檢查元素是否存在
使用 Contains
方法檢查 HashSet
中是否包含某個(gè)元素:
bool contains = numbers.Contains(2); // 返回 false,因?yàn)?2 已經(jīng)被移除
遍歷 HashSet
使用 foreach
循環(huán)遍歷 HashSet
中的元素:
foreach (int number in numbers)
{
Console.WriteLine(number);
}
HashSet 的操作
HashSet<T>
提供了一些強(qiáng)大的集合操作,例如并集、交集、差集和對(duì)稱(chēng)差集。
并集(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 現(xiàn)在包含 { 1, 2, 3, 4, 5 }
// 輸出結(jié)果
foreach (int num in setA)
{
Console.WriteLine(num);
}
}
}
}

交集(Intersect)
setA.IntersectWith(setB); // setA 現(xiàn)在包含 { 3 }
差集(Except)
setA.ExceptWith(setB); // setA 現(xiàn)在包含 { 1, 2 },因?yàn)檫@些元素在 setB 中不存在
對(duì)稱(chēng)差集(SymmetricExcept)
setA.SymmetricExceptWith(setB); // setA 現(xiàn)在包含 { 1, 2, 4, 5 },因?yàn)檫@些元素只在一個(gè)集合中存在

性能注意事項(xiàng)
HashSet<T>
在處理大量數(shù)據(jù)時(shí)通常比 List<T>
更高效,因?yàn)樗褂霉1韥?lái)存儲(chǔ)元素,這意味著它的添加、刪除和查找操作的平均時(shí)間復(fù)雜度為 O(1)。然而,這種效率是以犧牲順序和重復(fù)元素為代價(jià)的。
示例:使用 HashSet 過(guò)濾重復(fù)元素
假設(shè)我們有一個(gè)整數(shù)數(shù)組,我們想要移除所有重復(fù)的元素。
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);
}
}
}
}

在這個(gè)例子中,我們使用 HashSet
的構(gòu)造函數(shù)直接從數(shù)組中創(chuàng)建了一個(gè)集合,自動(dòng)移除了所有重復(fù)的元素。然后我們遍歷這個(gè)集合,打印出唯一的元素。
總結(jié)
HashSet<T>
是 C# 中一個(gè)非常有用的集合類(lèi),適用于需要存儲(chǔ)唯一元素集合的場(chǎng)景。它提供了豐富的集合操作方法,可以很方便地進(jìn)行并集、交集、差集和對(duì)稱(chēng)差集等操作。在處理大量數(shù)據(jù)時(shí),HashSet<T>
通常比其他集合類(lèi)型更高效。通過(guò)上面的例子和說(shuō)明,您應(yīng)該對(duì)如何在 C# 中使用 HashSet
有了一定的了解。
閱讀原文:原文鏈接
該文章在 2025/3/24 16:49:58 編輯過(guò)