【问题标题】:Dictionary, List or Array? [closed]字典、列表还是数组? [关闭]
【发布时间】:2012-01-08 14:00:40
【问题描述】:

我正在编写一个性能至关重要的服务,但我不确定什么是最快的。我有几个对象(50-200),每个对象都有一个 ID(整数,例如 84397 或 23845)。拥有一个字典、一个键值对列表或一个索引设置为 ID 且其余为空值的列表或具有相同想法的数组会更快吗?

【问题讨论】:

  • 您是否尝试过运行一个简单的测试应用程序?
  • 我已经开始了,但我认为提问会更有效率(对于未来的提问者和我来说)。
  • 您必须对这些对象进行哪些操作?按键搜索?搜索值?多插入?删除密钥?
  • 如果您使用数组 - 您拥有的最大 ID 是多少?您多久增加一次数组大小?
  • 按键读取值(随机时间),按键更新值(每秒),几次插入(每隔几秒)。最大 ID 不固定。

标签: c# .net arrays list dictionary


【解决方案1】:

这取决于您要执行的操作。假设您想要查找具有给定 ID 的对象

  • 巨大的数组方法最快:访问myArray[84397]是一个常数时间操作O(1)。当然,这种方法需要的内存最多。
  • 字典 几乎一样快,但需要更少的内存,因为它在内部使用hash table
  • 对列表方法最慢,因为您可能必须遍历整个列表才能找到您的条目,这会产生 O(n) 复杂度。李>

因此,在您的情况下,我会选择字典,除非大型数组的稍微好一点的性能与您的情况真正相关。

【讨论】:

  • 感谢您的帮助,我将使用字典(假设稍微意味着快 1 毫秒)。
  • 你写了“字典需要更少的内存”——你不是说写它需要更多的内存吗,因为它在内部使用了一个哈希表?
  • @BornToCode:它比前一个选项需要更少的内存,即巨大的数组。巨大的数组需要 maximumID 个存储位置,而字典只需要大约 someConstantnumberOfElements* 个存储位置。
【解决方案2】:

Dictionary<TKey, TValue> 内部使用哈希表,所以我认为它会是最快的。

【讨论】:

  • +1 这正是Dictionary 存在的原因。
  • HashTable 本身会更好吗?
  • @SBoss - 通用字典在内部不使用HashTable,所以没有。当您使用 ValueTypes 时,HashTable 的速度要慢得多,就像您计划使用 int 一样。
  • A Dictionary<K,V> 使用哈希表,但不使用 HashTable 类。
  • @Gabe - 是的。我现在意识到我并不清楚这一点。感谢您的澄清。
【解决方案3】:

Dictionary versus List Lookup time

另外,有关不同集合的更详细说明,请查看this question

【讨论】:

    【解决方案4】:

    您也可以使用哈希表。无论如何,字典在内部使用它。 但是字典的一个优点是它是一种 GENERIC 类型,可以为您提供类型安全性。

    这里是不同的线程 Dictionary Vs HashTable 我希望它可以帮助您做出决定。

    普雷文

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2013-03-27
      • 2014-02-23
      • 1970-01-01
      • 2021-03-03
      • 2011-01-27
      • 1970-01-01
      • 2016-03-15
      • 2015-07-27
      相关资源
      最近更新 更多