.NET常用的集合类型
.NET集合概述
.NET中,集合类型表示收集数据的不同方法,如哈希表、队列、堆栈、字典和列表。
在.NET中,所有集合都直接或间接地基于ICollection或ICollection<T>接口。IList和IDictionary以及它们的通用对应类都派生于这两个接口。
在基于IList或直接基于ICollection的集合中,每个元素只包含一个值。这些类型包括:
Array(数组)ArrayList(数组列表)List(列表)Queue(队列)ConcurrentQueue<T>(并发队列)Stack(栈)ConcurrentStack<T>(并发栈)LinkedList(链表) ObservableCollection<T>(可观察集合)
在基于IDictionary接口的集合中,每个元素都包含一个键和一个值。这些类型包括:
Hashtable(哈希表)SortedList(排序列表)SortedList<TKey,TValue>(泛型排序列表)Dictionary<TKey,TValue>(字典)ConcurrentDictionary<TKey,TValue>(并发字典)
如何选择集合类型
作为.NET初学者,面对如上列举的诸多集合类型,你是否对何时选择何种集合类型感到困惑呢?
通常情况下,选择使用泛型集合。下表描述了一些常见的集合使用场景以及可以用于这些场景的集合类。如果你是泛型集合的新手,下表有助于你选择最适合的泛型集合。
| 应用场景 | 泛型集合 | 非泛型集合 | 线程安全或不可变集合 |
|---|---|---|---|
| 将元素以键/值对方式存储,以便按键快速查找 | Dictionary |
Hashtable |
ConcurrentDictionary<TKey,TValue> ReadOnlyDictionary<TKey,TValue> ImmutableDictionary<TKey,TValue> |
| 按索引访问集合元素 | List |
Array ArrayList |
ImmutableList<T> ImmutableArray |
| 按元素先进先出原则访问元素 First-In-First-Out (FIFO) | Queue |
Queue |
ConcurrentQueue<T> ImmutableQueue |
| 按元素后进先出原则访问元素 Last-In-First-Out (LIFO) | Stack |
Stack |
ConcurrentStack<T> ImmutableStack<T> |
| 按顺序存取元素 | LinkedList |
不推荐 | 不推荐 |
当集合元素被删除或添加时接收通知 (实现了 INotifyPropertyChanged 和 INotifyCollectionChanged接口) |
ObservableCollection |
不推荐 | 不推荐 |
| 排序集合 | SortedList |
SortedList |
ImmutableSortedDictionary ImmutableSortedSet |
| 数学函数的集合 | HashSet SortedSet |
不推荐 | ImmutableHashSet ImmutableSortedSet |
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册