1

我最近一直在使用 SortedList(key,value),但我想知道它与 KeyedCollection(key, value) 有何不同,除了明显的排序部分。

例如,如果我正在构建一个需要通过键检索项目的能力并且它们的排序不是那么重要的类,那么以下哪一个是更好的选择?:

  1. SortedList 作为类的一个属性:

    public class MyClass<TKey,TItem>
    {
        private SortedList<TKey, TItem> myList;
    }
    

    或者

  2. 扩展 KeyedCollection

    public class MyClass<TKey,TItem> : KeyedCollection<TKey,TItem>{}
    

谢谢你。

4

1 回答 1

1

KeyedCollection 是一个抽象类 - 您必须创建派生自 KeyedCollection 的类型(“MyKeyedDictionary”),并且您必须指定它将如何从 TValue 中提取 TKey(覆盖 TKey GetKeyForItem(TValue) 方法)

因此,当您将值添加到 MyKeyedDictionary 时,您必须仅指定 TValue(并且您的类将在幕后提取 TKey。

KeyedCollection 的另一个区别是它将数据存储在 HashTable 和 List 中的场景中,但 SortedList 仅将数据存储在 List 中(实际上是两个列表 - 一个存储键,另一个存储值。它是通过键存储的当然)

所以 SortedList 不是关于排序值,而是关于 FAST 查找。主要问题是任何修改都很慢。但是有一个很好的替代方案,它也将具有良好的修改速度 - 并且该替代方案是 SortedDictionary。它还提供快速查找,同时也具有良好的修改性能。

PS SortedDictionary 将键存储在平衡树中,我不确定与存储在排序列表中的 SortedList 键的查找速度相比如何。但从我所读到的 - 两者都提供快速查找。

于 2014-12-05T10:47:10.377 回答