簡體   English   中英

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

[英]which one is more preferable : dictionary or hashtable

考慮到性能成本,我經常與dictionaryhashtable混淆並希望對它們進行比較...

哪一個更具成本效益?

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

為了表現,我建議你使用

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

字典是通用的。 它更新,更安全,並避免不必要的拳擊。 通常,您應盡可能使用詞典。

對於c#而言 ,這是一個很好的運行 ,它有點舊,但我認為它仍然適用。

字典對於小型集合更好,而哈希表對於大型集合則更好。 如果您不確定您將擁有多少項目,那么您可以使用HybridDictionary:

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

回應評論在我在原帖中鏈接的文章中說:

“對於字典中元素數量未知的情況,建議使用此類。它利用了具有小集合的ListDictionary的改進性能,並提供了切換到Hashtable的靈活性,Hashtable比ListDictionary更好地處理更大的集合。”

因此,HybridDictionary在ListDictonary和Hashtable之間切換。 通用字典實現為哈希表,如下所述:

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

“..The Dictionary(Of TKey,TValue)類被實現為哈希表。” 不確定,但我想這意味着通用詞典不如小型集合的無類型ListDictionary版本有效。

僅回答.NET方面:

Dictionary<TKey, TValue>幾乎肯定是最適合的。 它被鍵入你使用它的類型將在某些情況下帶來一些性能提升,但更重要的是它使它的使用更簡單,更清晰,並且沒有HashTable可能出現的某些可能的錯誤。

在.net中:Hashtable只有一個兌換功能:如果以下內容不適用,請使用字典。

但! Hashtable允許並發讀取器無鎖定。 您只需要同步寫入 這使其成為多線程應用程序中的緩存的理想選擇。 我有一些基於25M讀數的時間,假設有點擊: https//docs.google.com/spreadsheet/oimg? key = 0Akv6EOgOa_qSdDk5ZC1zdzZ2ZWM1aFR0YkJlVE9GdkE&int = 2& zx = skip17m2wm6am - x軸是集合的大小(鍵計數),y軸是以毫秒為單位的時間。

(“並發”時間是ConcurrentDictionary)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM