我常常与dictionary
和hashtable
混淆,并希望在考虑性能成本的情况下对它们进行比较......
哪一个更具成本效益?
答案 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)