2011-11-29 73 views
12

我正在写一个服务,其中性能是必不可少的,我不知道什么是最快的事情。我有几个对象(50-200),每个对象都有一个ID(整数,例如84397或23845)。有一个字典,一个KeyValue对的列表或者一个List的索引设置为ID,其余索引为空或者数组有相同想法会更快吗?字典,列表或数组?

+2

您是否尝试过运行简单的测试应用程序? –

+2

我已经开始了,但我认为要求会更有效率(对于未来的求职者和我)。 – SBoss

+3

你必须对这些对象进行哪些操作?按键搜索?搜索值?许多插入?删除密钥? – Marco

回答

19

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

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

因此,在你的情况,我会选择字典,除非巨大的数组的稍微好一些的表现是在你的情况真的很重要。

+0

感谢您的帮助,我会使用字典(假设边际意味着像1ms更快)。 – SBoss

+0

你写了“字典需要更少的内存” - 你是不是要编写它需要更多的内存,因为它在内部使用哈希表? – BornToCode

+4

@BornToCode:它比以前的选项,巨大的数组需要更少的内存。巨大的数组需要* maximumID *存储位置,而字典只需要* someConstant * numberOfElements *存储位置。 – Heinzi

8

Dictionary<TKey, TValue>使用哈希表内,所以我认为这将是最快的国家之一。

+2

+1这正是“Dictionary”存在的原因。 – James

+2

HashTable本身会更好吗? – SBoss

+2

@SBoss - 通用字典内部不使用'HashTable',所以没有。当你使用ValueTypes时,'HashTable'会相当慢,就像你计划用'int'做的那样。 –

-1

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

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

Praveen