已排序的集合类型

System.Collections.SortedList 类、System.Collections.Generic.SortedList<TKey, TValue> 泛型类和 System.Collections.Generic.SortedDictionary<TKey, TValue> 泛型类类似于 Hashtable 类和 Dictionary<TKey, TValue> 泛型类,因为它们也实现 IDictionary 接口,但是它们以基于键的排序顺序维护元素,没有哈希表的 O(1) 插入和检索特性。 这三个类具有若干共性:

下表列举两个排序的列表类与 SortedDictionary<TKey, TValue> 类之间的一些区别。

SortedList 非泛型类和 SortedList<TKey, TValue> 泛型类

SortedDictionary<TKey, TValue> 泛型类

返回键和值的属性是有索引的,从而允许高效的索引检索。

无索引的检索。

检索的运算复杂度为 O(log n)。

检索的运算复杂度为 O(log n)。

插入和移除的运算复杂度一般为 O(n);但是,对于已经处于排序顺序的数据,插入操作的运算复杂度为 O(1),因此每个元素都被添加到列表的末尾。 (这假设不需要调整大小。)

插入和移除的运算复杂度为 O(log n)。

SortedDictionary<TKey, TValue> 使用更少的内存。

SortedList 非泛型类和 SortedList<TKey, TValue> 泛型类使用更多内存。

对于必须可从多个线程并发访问的已排序列表或字典,可以向从 ConcurrentDictionary<TKey, TValue> 派生的类添加排序逻辑。

注意注意

对于包含自己的键的值(例如,包含雇员 ID 编号的雇员记录),可以通过从 KeyedCollection<TKey, TItem> 泛型类派生创建带键的集合,该集合具有列表的一些特征和字典的一些特征。

从 .NET Framework 4 版开始,SortedSet<T> 类提供了一个在执行插入、删除和搜索操作之后维护对数据的排序的自平衡树。 此类和 HashSet<T> 类实现 ISet<T> 接口。

请参见

参考

System.Collections.IDictionary

System.Collections.Generic.IDictionary<TKey, TValue>

ConcurrentDictionary<TKey, TValue>

概念

常用的集合类型