首页 > 代码库 > VS 2012 C# 集合
VS 2012 C# 集合
本文内容
- 集合
- 性能
最近复习了一下集合,C# 关于集合的类蛮多的,但我除了 List 经常用之外,其他的用还真不多,但其实,每个集合的差别很大,各有适用的场景,功能也很强大。
下载 Demo
集合
集合,都是一些数据结构中提到的常见结构,比如,列表、队列、栈、链表、字典、散列等等,其中,列表、链表、字典、散列还有有序和无序之分等等。
集合 | 描述 |
ArrayList,List<T> | 列表,ArrayList 是 List<T> 的非泛型形式。 |
Stack<T> | 栈 |
Queue<T> | 队列 |
HashSet<T>,SortedSet<T> | 集,包含不重复元素的集合成为“集(set)”. 其中,HashSet<T> 集合包含不重复元素的无序列表;SortedSet<T> 集合包含不重复元素的有序列表。 |
LinkedList<T> | 双向链表 |
Dictionary<TKey, TValue> | 字典,允许按照某个键来访问元素。字典也称为映射或散列表。字典的主要特征是能根据键快速查找值。也可以自由添加和删除元素,这有点 List<T> 类,但没有在内存中移动后续元素的性能开销。 |
SortedDictionary<TKey, TValue> | 有序字典,是一个二叉搜索树,其中的元素根据键来排序。该键类型必须实现 IComparable<TKey> 接口。 |
SortedList<TKey, TValue> | 有序链表,该类按照键给元素排序。 |
性能
集合 | Add | Insert | Remove | Item | Sort | Find |
List<T> | 如果集合必须重置大小,就是 O(1) 或 O(n) | O(n) | O(n) | O(1) | O(n log n),最坏情况 O(n^2) | O(n) |
Stack<T> | Push(),如果栈必须重置大小,就是 O(1) 或 O(n) | N/A | Pop() O(1) | N/A | N/A | N/A |
Queue<T> | Enqueue(),如果队列必须重置大小,就是 O(1) 或 O(n) | N/A | Dequeue() O(1) | N/A | N/A | N/A |
HashSet<T> | 如果集必须重置大小,就是 O(1) 或 O(n) | Add() O(1) 或 O(n) | O(1) | N/A | N/A | N/A |
LinkedList<T> | AddLast() O(1) | AddAfter() O(1) | O(1) | N/A | N/A | O(n) |
Dictionary<TKey, TValue> | O(1) 或 O(n) | N/A | O(1) | O(1) | N/A | N/A |
SortedDictionary<TKey, TValue> | O(log n) | N/A | O(log n) | O(log n) | N/A | N/A |
SortedList<TKey, TValue> | 无序数据为 O(n),如果必须重置大小,到列表的尾部就是 O(log n) | N/A | O(n) | 读写是 O(log n),如果键在列表中,就是 O(log n),否则,就是 O(n) | N/A | N/A |
* 注意:N/A 表示该操作不能应用于这种集合类型。
其中,
- O(1) 表示无论集合中有多少数据项,这个操作需要的时间都不变;
- O(n) 表示对于集合中的每个元素,需要增加的时间都是相同的;
- O(log n) 表示操作需要的时间随集合中元素的增加而增加,但每个元素需要增加的时间,不是线性的,而不是呈对数曲线。
下载 Demo
VS 2012 C# 集合