.NET 3.5 引入 HashSet<T>,底層採用雜湊表結構,可視為「無 Value 的 Dictionary」。特性:不支援索引存取、不允許重複元素、元素必須正確實作 GetHashCode 與 Equals。
| 集合類型 | Contains 時間複雜度 | 適用場景 |
|---|---|---|
List<T> | O(n) 線性掃描 | 資料量小、需保留順序、允許重複 |
HashSet<T> | O(1) 雜湊查找 | 資料量大、頻繁查找、需集合運算 (聯集/交集) |
List<T>。參考 HybridDictionary 切換閾值 (內部 8 筆以下用 ListDictionary,以上用 Hashtable),小資料量雜湊額外負擔反而較慢。HashSet<T>。典型案例:關鍵字過濾、權限代碼驗證、ID 去重。HashSet<T> 內建 UnionWith、IntersectWith、ExceptWith、SymmetricExceptWith,效能遠優於 LINQ 對 List 操作。var keywords = new HashSet<string>({ "admin", "root", "system" }, StringComparer.OrdinalIgnoreCase);
// O(1) 查找
if (keywords.Contains(input)) RejectRequest();
正確選擇集合類型是效能調優的基礎。HashSet<T> 專為「查找」與「集合運算」設計,大數據場景下能帶來數量級的效能提升;小資料量則以 List<T> 更輕量、更直觀。