在 C# 中,除了 Dictionary、List、HashSet 和 Hashtable 之外,还有许多其他可以保存列表或集合类型的数据结构,具体包括以下几类:
📌 数组类
1. Array(数组)
- 固定长度,性能高,适用于已知大小的数据集。
 - 适合频繁访问但不需要修改大小的场景。
 
csharp
int[] arr = new int[5] { 1, 2, 3, 4, 5 }; 
📌 列表类
2. Queue<T>(队列)
- 先进先出(FIFO)结构。
 - 适用于按顺序处理任务的场景。
 
csharp
Queue<int> queue = new Queue<int>(); queue.Enqueue(1); int item = queue.Dequeue(); // 取出第一个元素 
3. Stack<T>(栈)
- 后进先出(LIFO)结构。
 - 适用于逆序或撤销操作的场景。
 
csharp
Stack<int> stack = new Stack<int>(); stack.Push(1); int item = stack.Pop(); // 取出最后一个元素 
4. LinkedList<T>(链表)
- 双向链表,支持在头尾或中间快速插入和删除操作。
 - 适用于频繁插入和删除的场景。
 
csharp
LinkedList<int> list = new LinkedList<int>(); list.AddFirst(1); list.AddLast(2); 
📌 集合类
5. SortedSet<T>(有序集合)
- 保证元素唯一性,并且自动按升序排序。
 
csharp
SortedSet<int> set = new SortedSet<int>(); set.Add(3); set.Add(1); set.Add(2); // 结果:1, 2, 3(自动排序) 
6. ConcurrentBag<T>(线程安全集合)
- 允许并发访问的集合,适用于多线程场景。
 
csharp
ConcurrentBag<int> bag = new ConcurrentBag<int>(); bag.Add(1); bag.Add(2); 
7. BlockingCollection<T>(阻塞集合)
- 提供线程安全的生产者/消费者模式。
 
csharp
BlockingCollection<int> collection = new BlockingCollection<int>(); collection.Add(1); int item = collection.Take(); // 阻塞直到有数据 
8. ObservableCollection<T>(可观察集合)
- 当集合发生变化时会触发通知(通常用于数据绑定)。
 
csharp
ObservableCollection<int> observableList = new ObservableCollection<int>();
observableList.CollectionChanged += (sender, e) => 
{ Console.WriteLine("Collection changed"); 
}; 
observableList.Add(1); 
📌 映射类
9. SortedDictionary<TKey, TValue>(有序字典)
- 按键的升序排序,基于 
Red-Black Tree实现。 
csharp
SortedDictionary<int, string> dict = new SortedDictionary<int, string>(); 
dict.Add(2, "B"); 
dict.Add(1, "A"); 
dict.Add(3, "C"); // 输出顺序为:1 -> 2 -> 3 
10. SortedList<TKey, TValue>(有序列表)
- 基于数组,按键排序,插入和删除速度较慢。
 
csharp
SortedList<int, string> sortedList = new SortedList<int, string>(); 
sortedList.Add(1, "A"); 
sortedList.Add(2, "B"); 
11. ConcurrentDictionary<TKey, TValue>(线程安全字典)
- 线程安全的键值对集合,适合在多线程场景下使用。
 
csharp
ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
dict.TryAdd(1, "A"); 
📌 特殊集合类
12. BitArray(位数组)
- 用于高效存储和操作位(布尔值)。
 
csharp
BitArray bits = new BitArray(8); 
bits[0] = true; 
13. NameValueCollection(键值对集合,允许重复键)
- 允许键重复,存储字符串键值对。
 
csharp
NameValueCollection collection = new NameValueCollection(); 
collection.Add("key", "value1"); 
collection.Add("key", "value2"); 
14. HybridDictionary(小规模时使用 ListDictionary,大规模时自动切换到 Hashtable)
 
- 在数据量少时使用 
ListDictionary,大时切换为Hashtable。 
csharp
HybridDictionary hybridDict = new HybridDictionary(); 
hybridDict.Add("key", "value"); 
15. ImmutableArray<T>, ImmutableList<T>, ImmutableDictionary<TKey, TValue>(不可变集合)
- 定义后不可修改,适用于线程安全场景。
 
csharp
var immutableList = ImmutableList.Create(1, 2, 3); 
immutableList = immutableList.Add(4); 
🔥 总结
| 数据结构 | 特点 | 适用场景 | 
|---|---|---|
Array | 固定大小,访问快 | 固定长度数据集 | 
List<T> | 可变长度,支持索引访问 | 随机访问和动态添加 | 
LinkedList<T> | 双向链表,插入/删除快 | 频繁修改和插入 | 
Stack<T> | 后进先出 | 逆序操作 | 
Queue<T> | 先进先出 | 按顺序处理任务 | 
HashSet<T> | 元素唯一 | 去重集合 | 
SortedSet<T> | 唯一且排序 | 唯一+排序 | 
Dictionary<K,V> | 快速键值对访问 | 快速查找 | 
SortedDictionary<K,V> | 按键排序 | 排序+快速查找 | 
ConcurrentBag<T> | 线程安全的集合 | 并发访问 | 
ImmutableList<T> | 不可变集合 | 线程安全 | 
如果你要在多线程环境下操作,建议用 ConcurrentDictionary、ConcurrentBag 或 BlockingCollection。
 如果需要有序性,用 SortedList 或 SortedDictionary。
 如果要去重,用 HashSet 或 SortedSet。