SortedList与KeyedCollection

时间:2013-05-24 20:11:47

标签: c# sortedlist keyedcollection

我最近一直在使用SortedList(键,值),但我想知道它与KeyedCollection(键,值)的区别,除了明显的排序部分。

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

  1. SortedList作为类的属性:

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

  2. 扩展KeyedCollection

    public class MyClass<TKey,TItem> : KeyedCollection<TKey,TItem>{}
    
  3. 谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

KeyedCollection的另一个不同之处在于它将数据存储在HashTable和List中的场景中,但SortedList只在List中存储数据(实际上是两个列表 - 一个存储键,其他存储值。它是按密钥存储)

所以SortedList不是关于排序值,而是关于FAST查找。主要问题是任何修改都很慢。但是有一个很好的选择,也会有很好的修改速度 - 而另一个选择是SortedDictionary。它还提供快速查找,但也具有良好的修改性能。

P.S。 SortedDictionary将密钥存储在平衡树中,我不确定如何将查找速度与SortedList的密钥进行比较,这些密钥存储在排序列表中。但是根据我的阅读 - 两者都提供快速查找。

相关问题