目录

C中除了Dictionary,List,HashSet,HashTable-还有哪些可以保存列表的数据类型

C#中除了Dictionary,List,HashSet,HashTable 还有哪些可以保存列表的数据类型?

在 C# 中,除了 DictionaryListHashSetHashtable 之外,还有许多其他可以保存列表或集合类型的数据结构,具体包括以下几类:


📌 数组类

1 Array (数组)

  • 固定长度,性能高,适用于已知大小的数据集。
  • 适合频繁访问但不需要修改大小的场景。 csharp int[] arr = new int[5] { 1, 2, 3, 4, 5 };

📌 列表类

2 **Queue **(队列)

  • 先进先出(FIFO)结构。
  • 适用于按顺序处理任务的场景。 csharp Queue queue = new Queue(); queue.Enqueue(1); int item = queue.Dequeue(); // 取出第一个元素

3 **Stack **(栈)

  • 后进先出(LIFO)结构。
  • 适用于逆序或撤销操作的场景。 csharp Stack stack = new Stack(); stack.Push(1); int item = stack.Pop(); // 取出最后一个元素

4 **LinkedList **(链表)

  • 双向链表,支持在头尾或中间快速插入和删除操作。
  • 适用于频繁插入和删除的场景。 csharp LinkedList list = new LinkedList(); list.AddFirst(1); list.AddLast(2);

📌 集合类

5 **SortedSet **(有序集合)

  • 保证元素唯一性,并且自动按升序排序。 csharp SortedSet set = new SortedSet(); set.Add(3); set.Add(1); set.Add(2); // 结果:1, 2, 3(自动排序)

6 **ConcurrentBag **(线程安全集合)

  • 允许并发访问的集合,适用于多线程场景。 csharp ConcurrentBag bag = new ConcurrentBag(); bag.Add(1); bag.Add(2);

7 **BlockingCollection **(阻塞集合)

  • 提供线程安全的生产者/消费者模式。 csharp BlockingCollection collection = new BlockingCollection(); collection.Add(1); int item = collection.Take(); // 阻塞直到有数据

8 **ObservableCollection **(可观察集合)

  • 当集合发生变化时会触发通知(通常用于数据绑定)。 csharp ObservableCollection observableList = new ObservableCollection(); observableList.CollectionChanged += (sender, e) => { Console.WriteLine(“Collection changed”); }; observableList.Add(1);

📌 映射类

9 **SortedDictionary **(有序字典)

  • 按键的升序排序,基于 Red-Black Tree 实现。 csharp SortedDictionary dict = new SortedDictionary(); dict.Add(2, “B”); dict.Add(1, “A”); dict.Add(3, “C”); // 输出顺序为:1 -> 2 -> 3

10 **SortedList **(有序列表)

  • 基于数组,按键排序,插入和删除速度较慢。 csharp SortedList sortedList = new SortedList(); sortedList.Add(1, “A”); sortedList.Add(2, “B”);

11 **ConcurrentDictionary **(线程安全字典)

  • 线程安全的键值对集合,适合在多线程场景下使用。 csharp ConcurrentDictionary dict = new ConcurrentDictionary(); 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 , ImmutableList, ImmutableDictionary(不可变集合)

  • 定义后不可修改,适用于线程安全场景。 csharp var immutableList = ImmutableList.Create(1, 2, 3); immutableList = immutableList.Add(4);

🔥 总结

数据结构特点适用场景
Array固定大小,访问快固定长度数据集
List可变长度,支持索引访问随机访问和动态添加
LinkedList双向链表,插入/删除快频繁修改和插入
Stack后进先出逆序操作
Queue先进先出按顺序处理任务
HashSet元素唯一去重集合
SortedSet唯一且排序唯一+排序
Dictionary快速键值对访问快速查找
SortedDictionary按键排序排序+快速查找
ConcurrentBag线程安全的集合并发访问
ImmutableList不可变集合线程安全

如果你要在多线程环境下操作 ,建议用 ConcurrentDictionaryConcurrentBagBlockingCollection。 如果需要有序性 ,用 SortedListSortedDictionary。 如果要去重 ,用 HashSetSortedSet