哪一个更可取:字典或散列表

时间:2012-01-20 16:48:47

标签: c# java .net

我常常与dictionaryhashtable混淆,并希望在考虑性能成本的情况下对它们进行比较......

哪一个更具成本效益?

6 个答案:

答案 0 :(得分:5)

在Java中,两者都不是更好的恕我直言。这些是在Java 1.0中添加的集合,以及十多年前在Java 1.2中添加的改进集合。

为表现我会建议您使用

Map<Key, Value> map = new HashMap<Key, Value>();

答案 1 :(得分:3)

字典是通用的。它更新,更安全,并避免不必要的拳击。 通常,您应尽可能使用词典。

答案 2 :(得分:2)

Heres a good run down for c#,它有点旧,但我认为它仍然适用。

答案 3 :(得分:1)

Dictionary适用于小型集合,而哈希表适用于大型集合。如果您不确定您将拥有多少项,那么您可以使用HybridDictionary:

http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx

回应评论 在我在原帖中链接的文章中说:

“对于字典中元素数量未知的情况,建议使用此类。它利用了具有小集合的ListDictionary的改进性能,并提供了切换到处理更大的Hashtable的灵活性集合比ListDictionary更好。“

因此,HybridDictionary在ListDictonary和Hashtable之间切换。通用字典实现为哈希表,如下所述:

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

“.. Dictionary(Of TKey,TValue)类实现为哈希表。” 不确定,但我想这意味着通用词典不如小型集合的无类型ListDictionary版本有效。

答案 4 :(得分:1)

仅回答.NET方面:

Dictionary<TKey, TValue>几乎肯定是值得的。根据您使用它的类型键入它会在某些情况下带来一些性能提升,但更重要的是它使其使用更简单,更清晰,并且没有HashTable可能发生的某些可能的错误。

答案 5 :(得分:1)

在.net中:Hashtable只有一个兑换功能:如果以下内容不适用,请使用字典。

但是! Hashtable允许并发读取器无锁定。您只需要同步写入。这使其成为多线程应用程序中的缓存的理想选择。我有一些基于25M读数的时间,假设命中:https://docs.google.com/spreadsheet/oimg?key=0Akv6EOgOa_qSdDk5ZC1zdzZ2ZWM1aFR0YkJlVE9GdkE&oid=2&zx=sukl7m2wm6am - x轴是收集的大小(密钥数),y轴是以毫秒为单位的时间。

(“并发”时间是ConcurrentDictionary)

相关问题