已排序的集合类型
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> 泛型类 |
|
---|---|
返回键和值的属性是有索引的,从而允许高效的索引检索。 |
无索引的检索。 |
检索的运算复杂度为 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>