所有集合實作 IEnumerable,支援 `foreach` 迭代。核心介面繼承鏈:
IEnumerable
└─ ICollection (Count, CopyTo, IsSynchronized, SyncRoot)
├─ IList (索引存取、排序、插入刪除) → List, ArrayList
└─ IDictionary (鍵值對) → Dictionary, Hashtable, SortedList
| 類別 | 實作介面 | 特性 | 適用場景 |
|---|---|---|---|
| ArrayList | IList, ICollection, IEnumerable | 動態陣列、Object 儲存、自動擴容 2倍 | 舊專案相容、元素型別不固定 |
| Hashtable | IDictionary, ICollection, IEnumerable | 雜湊表、鍵值對、執行緒安全(同步包裝) | 舊專案、需多執行緒讀取 |
| SortedList | IDictionary, ICollection, IEnumerable | 鍵排序、陣列實現、插入刪除 O(n) | 小資料量需排序字典 |
| Queue | ICollection, IEnumerable | FIFO 佇列、Enqueue/Dequeue | 訊息佇列、BFS |
| Stack | ICollection, IEnumerable | LIFO 堆疊、Push/Pop | 遞迴轉迭代、撤銷機制 |
| BitArray | ICollection, IEnumerable | 位元陣列、壓縮儲存 | 旗標集合、位元運算 |
命名空間:System.Collections.Generic。優勢:型別安全、效能優於非泛型(避免裝箱/拆箱)、IntelliSense 完整。
| 泛型類別 | 對應非泛型 | 核心特性 |
|---|---|---|
| List<T> | ArrayList | 動態陣列、索引 O(1)、尾端增刪 O(1) |
| Dictionary<TKey, TValue> | Hashtable | 雜湊表、查找/插入 O(1)、鍵唯一 |
| SortedDictionary<TKey, TValue> | SortedList | 紅黑樹、鍵排序、操作 O(log n) |
| SortedList<TKey, TValue> | SortedList | 排序陣列、記憶體較省、插入 O(n) |
| Queue<T> | Queue | FIFO |
| Stack<T> | Stack | LIFO |
| HashSet<T> | — | 集合運算、去重、查找 O(1) |
| LinkedList<T> | — | 雙向鏈表、中間增刪 O(1) |
| ConcurrentQueue<T> / ConcurrentDictionary<TKey,TValue> | — | 執行緒安全、無鎖/細粒度鎖 |
命名空間:System.Collections / System.Collections.Specialized
CollectionBase:非泛型 IList 實作基類,覆寫 `OnInsert/OnRemove/OnValidate` 等虛擬方法控制行為。DictionaryBase:非泛型 IDictionary 實作基類。ReadOnlyCollectionBase:唯讀包裝。StringCollection、`StringDictionary`、`NameValueCollection`:字串專用集合。現代開發請直接繼承 `Collection
public class MyIntCollection : IEnumerable {
private int[] _data = { 1, 2, 3, 4, 5 };
public IEnumerator GetEnumerator() {
foreach (var x in _data) yield return x; // 編譯器自動生成狀態機
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); // 非泛型介面顯式實作
}
// 使用
foreach (int n in new MyIntCollection()) Console.WriteLine(n);
| 需求 | 推薦集合 | 時間複雜度 |
|---|---|---|
| 頻繁索引存取、尾端增刪 | List<T> | O(1) 索引、O(1) 尾端增刪 |
| 頻繁頭端/中間增刪 | LinkedList<T> | O(1) 節點增刪(需節點參考) |
| 鍵值快速查找 | Dictionary<TKey,TValue> | O(1) 平均 |
| 鍵值需排序 | SortedDictionary<TKey,TValue> | O(log n) |
| 唯一值集合、集合運算 | HashSet<T> | O(1) 查找 |
| 多執行緒佇列 | ConcurrentQueue<T> | 無鎖 Enqueue/TryDequeue |
| 多執行緒字典 | ConcurrentDictionary<TKey,TValue> | 細粒度鎖、TryAdd/GetOrAdd |
| 固定大小、唯讀 | Array / ReadOnlyCollection<T> | 最低記憶體、最快讀取 |
foreach 中修改集合 → `InvalidOperationException`。解:先 `ToList()` 複本再刪,或用 `for` 逆向迴圈。