hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
生活随笔
收集整理的這篇文章主要介紹了
hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
hashtable里存的對象全部是object類型 ,所有對象存進去都被轉成object類型,讀取出來每次都需要轉換類型,hashtable對存入的類型沒有限制 , 因此在讀取轉換類型時容易出錯,
dictionary只能存入定義時指定的類型,而且不像hashtable會把類型轉換成object,存取起來比前者方便,效率更高,因為不需要轉換類型,所以不會出現hashtable里的轉換類型錯誤而報出程序異常.
??????簡單點說在 hashtable所有的對象基于HASH算法管理,但它是無類型信息的都只是一種類型:object,所以你可能需要進行一些類型轉換的操作,即浪費時間又有可能出錯。而且對于int,float這些值類型還需要進行裝箱等操作,非常耗時。
??????對于Dict <TKey,TValue>是由CLR支持泛型操作,速度快,沒有類型轉換操作,即完全是類型安全的。
??????由于 Hashtable 和 Dictionary 同時存在, 在使用場景上必然存在選擇性, 并不任何時刻都能相互替代.
? ? [1] 單線程程序中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分.
? ? [2] 多線程程序中推薦使用 Hashtable, 默認的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進行保護, 效率大減.
? ? [3] Dictionary 有按插入順序排列數據的特性 (注: 但當調用 Remove() 刪除過節點后順序被打亂), 因此在需要體現順序的情境中使用 Dictionary 能獲得一定方便.
基本上是Dictionary 性能高些
dictionary只能存入定義時指定的類型,而且不像hashtable會把類型轉換成object,存取起來比前者方便,效率更高,因為不需要轉換類型,所以不會出現hashtable里的轉換類型錯誤而報出程序異常.
??????簡單點說在 hashtable所有的對象基于HASH算法管理,但它是無類型信息的都只是一種類型:object,所以你可能需要進行一些類型轉換的操作,即浪費時間又有可能出錯。而且對于int,float這些值類型還需要進行裝箱等操作,非常耗時。
??????對于Dict <TKey,TValue>是由CLR支持泛型操作,速度快,沒有類型轉換操作,即完全是類型安全的。
??????由于 Hashtable 和 Dictionary 同時存在, 在使用場景上必然存在選擇性, 并不任何時刻都能相互替代.
? ? [1] 單線程程序中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分.
? ? [2] 多線程程序中推薦使用 Hashtable, 默認的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進行保護, 效率大減.
? ? [3] Dictionary 有按插入順序排列數據的特性 (注: 但當調用 Remove() 刪除過節點后順序被打亂), 因此在需要體現順序的情境中使用 Dictionary 能獲得一定方便.
基本上是Dictionary 性能高些
轉載于:https://www.cnblogs.com/vihone/archive/2009/08/11/1543554.html
總結
以上是生活随笔為你收集整理的hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 社保每个月领多少钱啊?
- 下一篇: 批处理文件入门