【问题标题】:Complexity of searching in a list and in a dictionary在列表和字典中搜索的复杂性
【发布时间】:2015-07-24 11:22:29
【问题描述】:

假设我有一堂课:

class C
{
    public int uniqueField;
    public int otherField;
}

这是实际问题的非常简化的版本。我想存储此类的多个实例,其中每个实例的“uniqueField”应该是唯一的。

在这种情况下什么更好?

a) 以 uniqueField 为键的字典

Dictionary<int, C> d;

或 b) 列表?

List<C> l;

在第一种情况 (a) 中,相同的数据将被存储两次(作为键和类实例的字段)。但问题是:在字典中查找元素是否比在列表中更快?还是同样快?

一)

d[searchedUniqueField]

b)

l.Find(x=>x.uniqueField==searchedUniqueField);

【问题讨论】:

    标签: c# list dictionary


    【解决方案1】:

    假设您有很多实例,在字典中查找项目可能会快得多。基本上,Dictionary&lt;,&gt;hash table,除了由于冲突之外,查找时间为 O(1)。

    现在,如果集合真的很小,那么寻找哈希码、计算正确的桶、然后在该桶中查找匹配的哈希码、然后执行键相等检查所花费的额外开销可能比仅检查每个元素要长在一个列表中。

    如果您可能有很多实例但可能没有,我通常会选择字典方法。一方面,它表达了您实际想要实现的目标:一种通过键访问元素的简单方法。除非您的小集合比大集合多得多,否则小集合的开销不太可能非常大。

    【讨论】:

      【解决方案2】:

      当查找次数大大超过插入次数时使用字典。当您总是少于四个项目时,可以使用 List。

      参考 - http://www.dotnetperls.com/dictionary-time

      【讨论】:

        【解决方案3】:

        如果您想确保您的客户端不会创建重复的密钥,您可能希望您的班级负责创建唯一密钥。因此,一旦唯一键生成是类的责任,字典或列表就是客户端的决定。

        【讨论】:

          猜你喜欢
          • 2019-07-30
          • 1970-01-01
          • 1970-01-01
          • 2020-08-09
          • 2014-12-14
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          • 1970-01-01
          相关资源
          最近更新 更多