System.Collections.SortedList 类、System.Collections.Generic.SortedList<TKey,TValue> 泛型类和 System.Collections.Generic.SortedDictionary<TKey,TValue> 泛型类与 Hashtable 类及 Dictionary<TKey,TValue> 泛型类相似,它们实现了 IDictionary 接口,但它们按键值排序顺序维护元素,并且没有哈希表的 O(1) 插入和检索特征。 这三个类具有几种共同特征:
这三个类都实现 System.Collections.IDictionary 接口。 这两个 System.Collections.Generic.IDictionary<TKey,TValue> 泛型类还实现泛型接口。
每个元素都是用于枚举的键/值对。
注释
非泛 SortedList 型类在枚举时返回 DictionaryEntry 对象,尽管这两种泛型类型返回 KeyValuePair<TKey,TValue> 对象。
元素根据 System.Collections.IComparer 实现(对于非泛型 SortedList 实现)或 System.Collections.Generic.IComparer<T> 实现(对于两个泛型类)进行排序。
每个类都提供返回仅包含键或仅值集合的属性。
下表列出了两个排序列表类和 SortedDictionary<TKey,TValue> 类之间的一些差异。
SortedList 非泛型类和 SortedList<TKey,TValue> 泛型类 | SortedDictionary<TKey,TValue> 泛型类 |
---|---|
返回键和值的属性已编制索引,从而允许高效的索引检索。 | 无索引检索。 |
检索属于 O(log n ) 操作。 |
检索属于 O(log n ) 操作。 |
插入和删除通常是 O(n );但是,对于已按排序顺序的数据,插入为 O(log n ),以便将每个元素添加到列表的末尾。 (这假定不需要调整大小。 |
插入和删除的复杂度为 O(log n )。 |
使用的内存小于一个 SortedDictionary<TKey,TValue>。 | 使用比 SortedList 非泛型类和 SortedList<TKey,TValue> 泛型类更多的内存。 |
对于必须从多个线程并发访问的已排序列表或字典,可以将排序逻辑添加到派生自 ConcurrentDictionary<TKey,TValue>的类。 在考虑不可变性时,以下相应的不可变类型遵循类似的排序语义: ImmutableSortedSet<T> 和 ImmutableSortedDictionary<TKey,TValue>。
注释
对于包含其自己的键的值(例如,包含员工 ID 编号的员工记录),可以通过从 KeyedCollection<TKey,TItem> 泛型类派生来创建具有列表的某些特征和字典的某些特征的键化集合。
从 .NET Framework 4 开始,该 SortedSet<T> 类提供自平衡树,用于在插入、删除和搜索后按排序顺序维护数据。 此类和 HashSet<T> 类实现 ISet<T> 接口。