[英]which one is more preferable : dictionary or hashtable
考慮到性能成本,我經常與dictionary
和hashtable
混淆並希望對它們進行比較...
哪一個更具成本效益?
在Java中,兩者都不是更好的恕我直言。 這些是在Java 1.0中添加的集合,以及十多年前在Java 1.2中添加的改進集合。
為了表現,我建議你使用
Map<Key, Value> map = new HashMap<Key, Value>();
字典是通用的。 它更新,更安全,並避免不必要的拳擊。 通常,您應盡可能使用詞典。
字典對於小型集合更好,而哈希表對於大型集合則更好。 如果您不確定您將擁有多少項目,那么您可以使用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.