字典、列表还是数组? [关闭]
Posted
技术标签:
【中文标题】字典、列表还是数组? [关闭]【英文标题】:Dictionary, List or Array? [closed] 【发布时间】:2012-01-08 14:00:40 【问题描述】:我正在编写一个性能至关重要的服务,但我不确定什么是最快的。我有几个对象(50-200),每个对象都有一个 ID(整数,例如 84397 或 23845)。拥有一个字典、一个键值对列表或一个索引设置为 ID 且其余为空值的列表或具有相同想法的数组会更快吗?
【问题讨论】:
您是否尝试过运行一个简单的测试应用程序? 我已经开始了,但我认为提问会更有效率(对于未来的提问者和我来说)。 您必须对这些对象进行哪些操作?按键搜索?搜索值?多插入?删除密钥? 如果您使用数组 - 您拥有的最大 ID 是多少?您多久增加一次数组大小? 按键读取值(随机时间),按键更新值(每秒),几次插入(每隔几秒)。最大 ID 不固定。 【参考方案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 我希望它可以帮助您做出决定。
普雷文
【讨论】:
以上是关于字典、列表还是数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章