对于太多的添加和收集,这是收集或列表是最快的缺失?

时间:2009-12-07 10:13:28

标签: c#

我有一个列表,其中添加了大量元素&已删除每秒
我还需要同时在列表中找到元素。

我还需要进行键/值对比较才能进行搜索。

添加率高于删除率。

先谢谢。

2 个答案:

答案 0 :(得分:2)

尝试Dictionary

添加,删除和查找几乎是O(1)。我不确定“搜索的键/值比较”是什么意思,但是Dictionary将键映射到值并快速搜索。

如果您确实需要一个列表(即元素的排序),那么SortedDictionary将为您提供更好的服务。

答案 1 :(得分:2)

Dictionary<TKey, TValue>通常很快 - 摊销O(1)插入和删除。基本上它是O(1),除非它需要自我重构,此时它是O(n)。

什么算作插入和删除的“大量”元素?

鉴于Dictionary<TKey, TValue>在某种程度上是.NET中的标准“我需要一个键/值映射”数据结构,我至少对它进行基准测试以确定它是否执行在看到更深奥的东西之前,已经足够满足你的需求了。

但是,您的问题中的“列表”引用表明您可能还需要订购 - 实际情况是否如此?即,您是否需要能够按照添加顺序迭代条目?如果是这样,您可能需要创建自己的(Linked)List<T> / Dictionary<TKey, TValue>构图(经过适当的照顾)。

虽然SortedList<TKey, TValue>SortedDictionary<TKey, TValue> 提供了有保证的排序,但它不是插入排序 - 它是密钥排序。换句话说,如果你写:

sortedDictionary["c"] = ...;
sortedDictionary["a"] = ...;
sortedDictionary["b"] = ...;

然后迭代它,你将按顺序“a”,“b”,“c”获得条目。

与你可能从他们的名字中想到的相反,这两种类型都是字典(因为它们是键/值映射) - 它们只是以不同的方式实现,它们具有不同的性能特征。有关详细信息,请参阅MSDN文档。