字典、列表还是数组? [关闭]

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 我希望它可以帮助您做出决定。

普雷文

【讨论】:

以上是关于字典、列表还是数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将列表的javascript列表减少为列表字典[关闭]

Python:字典列表列表[关闭]

在 Swift 中获取列表的第一项 [关闭]

如何从字典列表中创建数据框 [关闭]

如何将列表转换为字典? [关闭]

我有一些列表。我需要从中制作字典。下面的示例[关闭]