首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 六大常用集合類型深度解析:ArrayList、Stack、Queue、Hashtable、SortedList、NameValueCollection

     編輯:關於C#

為什麼需要集合?陣列的四大短板

  1. 固定長度:Array.Resize 實為建立新陣列複製,效能差
  2. 型別單一:宣告時鎖定元素型別,集合預設儲存 object
  3. 無唯讀保護:陣列無法輕易暴露唯讀視圖
  4. 僅支援整數索引:無法用鍵值、優先序、LIFO/FIFO 等語意存取

六大非泛型集合詳細比較

集合命名空間資料結構核心特性典型用途
ArrayListSystem.Collections動態陣列索引存取、自動擴容、AddRange/InsertRange一般用途動態清單
StackSystem.CollectionsLIFO 堆疊Push/Pop/Peek、無索引回溯演算法、括號匹配、Undo 機制
QueueSystem.CollectionsFIFO 隊列Enqueue/Dequeue/Peek、無索引訊息佇列、BFS、工作排程
HashtableSystem.Collections雜湊表Key-Value、O(1) 查找、鍵唯一、無序快速查找、快取、字典映射
SortedListSystem.Collections排序雙陣列Key 自動排序、索引/鍵雙重存取、插入較慢 O(n)需有序列舉的鍵值對、小資料量排序字典
NameValueCollectionSystem.Collections.Specialized雜湊表(鍵可重複)單一鍵對應多值、GetValues(key) 取得陣列HTTP Header、查詢字串、表單資料

程式碼範例精華

ArrayList 靈活操作


var list = new ArrayList { 100, 9, 3, 7 };
list.AddRange(new[] { 11, 12 });
list.Remove(3);        // 移除值
list.RemoveAt(3);      // 移除索引
var sub = new ArrayList(list.GetRange(1, 3)); // 切片
foreach (int n in list) Console.WriteLine(n); // 無需轉型(編譯器隱含)
for (int i = 0; i < sub.Count; i++) Console.WriteLine((int)sub[i]); // 需轉型

Stack / Queue 核心操作


var stack = new Stack();
stack.Push(1); stack.Push(2);
stack.Pop();    // 2,移除
stack.Peek();   // 1,不移除

var queue = new Queue();
queue.Enqueue(1); queue.Enqueue(2);
queue.Dequeue(); // 1,移除
queue.Peek();    // 2,不移除

Hashtable vs NameValueCollection 差異


var ht = new Hashtable();
ht["key"] = "value1";
ht["key"] = "value2"; // 覆蓋,鍵唯一

var nvc = new NameValueCollection();
nvc.Add("key", "value1");
nvc.Add("key", "value2"); // 允許重複鍵
nvc.GetValues("key"); // 回傳 ["value1", "value2"]

現代化建議:改用泛型集合

舊集合建議替代優勢
ArrayListList<T>型別安全、避免裝箱/拆箱、效能更好
StackStack<T>同左
QueueQueue<T>同左
HashtableDictionary<TKey, TValue>型別安全、介面豐富
SortedListSortedDictionary<TKey, TValue> / SortedList<TKey, TValue>泛型版本效能更佳
NameValueCollectionDictionary<string, List<string>> / ILookup<string, string>LINQ 友善、型別安全

特殊集合補充

  • HybridDictionary:<10 項用 ListDictionary(線性搜尋),超過自動轉 Hashtable,小資料量極致效能
  • ListDictionary:極小資料量(<10)最佳
  • StringCollection:強型別字串清單
  • BitArray:位元陣列、旗標集合
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved