什么是.Contains和Iteration的有效数据结构?

时间:2019-11-22 15:59:06

标签: c# data-structures

我需要一个动态的数据结构(添加/删除) 这对于

是最有效的
  • serializer.error
  • .Contains()

两个动作的调用频率均高于(添加/删除)

目前,我最好的选择是Iteration

我现在正在考虑创建一个自定义数据结构Dictionary<T,T>,该结构包含一个Cache<T>并实现Dictionary<T,T>

这是有效的还是有一种更符合现有库的方法?

2 个答案:

答案 0 :(得分:2)

如@Ross Gurbutt的评论中所述,HashSet满足您的要求。但是,它不会保持插入项目的顺序(或者更准确地说,可能 。请参阅Jon Skeet的this回答)。

如果订单的忠诚度对您很重要,那么SortedSet可能就是您想要的。

编辑:以上建议是在您不希望集合中包含重复项的前提下进行的。

此外,正如@Ross Gurbutt所指出的(我应该早先提到的那样):

  

SortedSet.Contains为O(log n),而HashSet.Contains为O(1)

答案 1 :(得分:0)

您可以使用多个数据结构。

包含

使用HashSet获取对任何元素的O(1)访问时间。

查找和迭代

使用List<>按索引或列表的末尾添加/删除项目:O(1)。

List也可以通过二进制搜索来搜索(如果已排序):O(log(n))。如果未排序,则该搜索为线性O(n)。

迭代就是迭代:在您的List上,总是O(n)...