字典,列表或数组?

SBo*_*oss 13 .net c# arrays dictionary list

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

Hei*_*nzi 19

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

  • 巨大阵列的方法是最快的:访问myArray[84397]是一个固定时间操作O(1) .当然,这种方法需要最多的记忆.
  • 词典是几乎一样快,但需要较少的内存,因为它使用一个哈希表内.
  • 成对列表的方法是最慢的,因为你可能不得不遍历整个列表,找到你的记录,这将产生O(n)的复杂性.

因此,在您的情况下,我会选择字典,除非在您的情况下,巨大阵列的性能略有提高.

  • @BornToCode:它比前一个选项(巨大的数组)需要更少的内存.巨大的数组需要*maximumID*存储位置,而字典只需要*someConstant*numberOfElements*存储位置. (4认同)

Har*_*san 8

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

  • `Dictionary <K,V>`使用哈希表,但不使用`HashTable`类. (3认同)
  • +1这正是"字典"存在的原因. (2认同)
  • HashTable本身会更好吗? (2认同)
  • @SBoss - 泛型字典在内部不使用`HashTable`,所以没有.当你使用ValueTypes时,`HashTable`会相当慢,就像你计划使用`int`一样. (2认同)