|
C#常见集合接口
| |||
|
接口
|
用途
| ||
|
非泛型接口
|
IEnumerator
| ||
|
IEnumerable
| |||
|
ICollection
| |||
|
IDictionary
| |||
|
IList
| |||
|
泛型接口
|
IEqualityComparer<T>
|
相等性比较
| |
|
IComparer<T>
|
排序
| ||
|
IEnumerator<T>
|
枚举器接口,用于遍历集合元素(实现该接口将能够享受foreach语法糖)。
| ||
|
IColletion<T>
| 提供获取集合基本属性和操作的方法,包括
元素个数、
清空集合、
添加元素、
删除元素、
元素包含检验、
集合范围复制
| ||
|
IList<T>
| 获取或移除指定位置元素(索引访问方式)、
在指定位置插入元素
计算指定元素位置
| ||
|
IDictionary<TKey,TValue>
|
访问键和值的接口
| ||
|
ISet
|
集合的布尔操作接口,包括集合的并、交、差、(真)子集和(真)超集检验等
| ||
|
IProducerConsumerCollection<T>
|
支持线程安全的接口(.NET 4增加)
| ||

|
C#常见集合表(注意:n/a为not applicatable,表示该操作不能应用于该类型集合)
| ||||||||
|
分类
|
集合名称
|
元素访问方式
|
增加
|
插入
|
删除
|
排序
|
检索
|
特点
|
|
非关联性集合
| List<T>
(列表)
|
Index
|
如果集合必须重置大小,就是O(1)或O(n)
|
O(n)
|
O(n)
|
O(n,logn),最坏情况是O(n^2)
| ①当重置集合大小时将会增加时间复杂度
②功能齐全方便,适用于小型集合
| |
| LinkedList<T>
(双向链表)
|
只能选择从头或尾部按照前后关系遍历访问
|
O(1)
|
O(1)
|
O(1)
|
n/a
|
n/a
| ①访问效率低下,必须从头尾遍历
②元素的添加和删除非常高效
| |
| Queue<T>
(队列)
|
只能获取底部元素
| 如果集合必须重置大小,就是O(1)或O(n)
|
n/a
|
O(1)
|
n/a
|
n/a
|
FIFO
| |
| Stack<T>
(栈)
|
只能获取顶部元素
|
n/a
|
O(1)
|
n/a
|
n/a
|
FILO
| ||
|
HashSet
|
只能通过IEnumerator遍历访问
|
O(1)或O(n)
|
O(1)
|
n/a
|
n/a
| ①均实现ISet接口,ISet接口表示集,所谓集为不含重复元素的集合,因此可保证元素的唯一性
②支持集合运算(并、交、差、(真)子集、(真)超集关系运算)
| ||
|
SortedSet
|
O(1)或O(n)
|
O(1)
|
n/a
|
n/a
| ||||
|
关联性集合
|
Dictionaty<TKey,TValue>
|
Key
|
O(1)或O(n)
|
n/a
|
O(1)
|
n/a
|
n/a
|
排序、检索性能取决于TKey实现的GetHashCode方法
|
|
SortedDictionary<TKey,TValue>
|
Key
|
O(logN)
|
n/a
|
O(logN)
|
n/a
|
n/a
| ||
|
SortedList<TKey,TValue>
|
Key
| 无序数据为O(n);
如果必须重置大小就是O(n);
到列表尾部就是O(logN)
|
n/a
|
O(n)
|
n/a
|
n/a
| ||
|
Lookup<TKey,TValue>
|
Key
| ①一键多值
②无构造函数,仅能通过静态扩展方法ToLookup创建
| ||||||
|
位数组
|
BitArray
|
Index
|
可基于int数组A创建位数组B,A中的每一个数字将转换为32位二进制形式,并将每一bit位值转换为true/false,最终B中的值只有true/false两种取值
| |||||
|
BitVector32
| ①最多32位的位数组
②值类型,性能比BitArray高
| |||||||
|
并发集合
|
ConcurrentQueue
| |||||||
|
ConcurrentStack
| ||||||||
|
ConcurrentBag
| ||||||||
|
ConcurrentDictionnary
| ||||||||
|
BlockingCollection
| ||||||||
937




被折叠的 条评论
为什么被折叠?



