.NET 集合將多個相似物件組合,支援 foreach 遍歷。最簡單結構為陣列,但大小固定;動態集合首選 ArrayList (非泛型) 或 List<T> (泛型)。本文介紹三大經典集合實作。
System.Collections。
using System;
using System.Collections;
namespace gosoa.com.cn
{
class Test
{
static void Main()
{
ArrayList arrayTest = new ArrayList(4);
arrayTest.Add("www.");
arrayTest.Add("gosoa.");
arrayTest.Add("com.");
arrayTest.Add("cn");
foreach (string item in arrayTest) Console.Write(item); // www.gosoa.com.cn
Console.WriteLine("\n" + arrayTest.Capacity); // 4
arrayTest.Add("url"); // 第 5 項觸發擴容
Console.WriteLine(arrayTest.Capacity); // 8
}
}
}
Insert(index, value):指定位置插入。RemoveAt(index) / Remove(value):移除。AddRange(collection) / RemoveRange(index, count):批次操作。
ArrayList arrayTest = new ArrayList(4);
arrayTest.Add("www."); arrayTest.Add("gosoa."); arrayTest.Add("com."); arrayTest.Add("cn");
// 輸出: www.gosoa.com.cn
arrayTest.Insert(0, "https://"); // 輸出: https://www.gosoa.com.cn
string[] stringArr = { "\n", "www.", "cnblogs.", "com" };
arrayTest.AddRange(stringArr); // 輸出包含兩個網址
arrayTest.RemoveRange(4, 4); // 移除第 4 索引起 4 項,剩 https://www.gosoa.com.cn
Push() 入堆疊,Pop() 出堆疊。
Stack stackTest = new Stack();
stackTest.Push("cn");
stackTest.Push("com.");
stackTest.Push("gosoa.");
stackTest.Push("www.");
// 遍歷輸出: www.gosoa.com.cn (LIFO 但 foreach 仍按插入順序? 實際 Stack 遍歷為 LIFO 逆序)
// 修正:Stack 實作 IEnumerable 時通常從頂端往下,故 foreach 輸出為 www.gosoa.com.cn
stackTest.Pop(); // 移除 www.
foreach (string item in stackTest) Console.Write(item); // 輸出: gosoa.com.cn
Enqueue() 入佇列,Dequeue() 出佇列。
Queue queueTest = new Queue();
queueTest.Enqueue("cn");
queueTest.Enqueue("com.");
queueTest.Enqueue("gosoa.");
queueTest.Enqueue("www.");
// 輸出: cncom.gosoa.www (FIFO 順序)
queueTest.Dequeue(); // 移除 cn
foreach (string item in queueTest) Console.Write(item); // 輸出: com.gosoa.www
| 集合 | 順序 | 核心方法 | 適用場景 |
|---|---|---|---|
| ArrayList | 索引順序 | Add/Insert/RemoveAt | 動態陣列、隨機存取 |
| Stack | LIFO | Push/Pop | 暫存、回溯、運算式求值 |
| Queue | FIFO | Enqueue/Dequeue | 排程、BFS、訊息佇列 |
現代開發建議優先使用泛型對應類別:List<T>、Stack<T>、Queue<T>,具型別安全且值型別免裝箱。