C# 包括存储一系列值或对象的专用类,称为集合。 C# 中有三种类型的集合:非泛型集合,泛型集合和并发集合。 System.Collections 命名空间包含非泛型集合类型,System.Collections.Generic 命名空间包含泛型集合类型。 System.Collections.Concurrent 下面包含并发集合(都是泛型了)
在大多数情况下,建议使用泛型集合,因为它们比非泛型集合执行得更快,还可以得到强类型的好处。(打点,编译出错提示)。 在有并发,多线程,Task的场景下可以使用 并发集合。
非泛型集合 | 描述 |
---|---|
ArrayList | ArrayList 存储任何类型的对象,如数组。但是,不需要像数组一样指定 ArrayList 的大小,因为它会自动增长。 |
Hashtable | Hashtable 存储键值对。它通过比较键的哈希值来检索值。 |
SortedList | SortedList 存储键值对。默认情况下,它会自动按键的升序排列元素。 |
Queue | Queue以 FIFO 样式(先进先出)存储值。它保持添加值的顺序。它提供了一个 Enqueue() 方法来添加值和一个 Dequeue() 方法来从集合中检索值。 C# 包括泛型和非泛型队列。 |
Stack | Stack 以 LIFO 样式(后进先出)存储值。它提供了 Push() 方法来添加值和 Pop() 和 Peek() 方法来检索值。 C# 包括泛型和非泛型堆栈。 |
BitArray | BitArray 管理一个紧凑的位值数组,这些值表示为布尔值,其中 true 表示该位打开 (1),false 表示该位关闭 (0)。 |
C# 在 System.Collections.Generic 命名空间中包含以下泛型集合类。
泛型集合 | 描述 |
---|---|
List |
泛型 List |
Dictionary<TKey,TValue> | Dictionary<TKey,TValue> 包含键值对。 |
SortedList<TKey,TValue> | SortedList<TKey,TValue> 存储键值对。 默认情况下,它会自动按键的升序添加元素。 |
Queue |
Queue |
Stack |
Stack |
Hashset |
Hashset |
并发集合 | 描述 |
---|---|
ConcurrentBag< |
List |
ConcurrentDictionary<TKey,TValue> | Dictionary<TKey,TValue> 的并发版本 |
ConcurrentQueue |
Queue |
ConcurrentStack |
Stack |
BlockingCollection |
先进先出,主要用来做生产消费者模式,类似于 Goang channel |
Channel |
先进先出,主要用来做生产消费者模式,跟 Goang channel更像了 |
代码主要分布在 https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections.Concurrent 下面