HashTable和Dictionary的區別

1.hashtable表示鍵值對的集合。在.net framework中,hashtable是system.collection命名空間提供的一個容器,用於處理和表現相似key-value的鍵值對,其中key一般可用來快速查找,同時key區分大小寫;value用於存儲對應於key的值。hashtable中key-value鍵值對均爲object類型,因此hashtable能夠支持任何類型的key-value鍵值對,任何非null對象均可以做爲鍵和值。數組

在哈希表中添加一個key鍵值對:hashtable.Add(key);安全

移除:hashtable.remove(key);多線程

移除全部:hashtable.clear();性能

查看是否含有某key:hashtable.contains(key);測試

2.hashset.net

hashset<T>類主要是設計用來作高性能集運算的,例如對兩個集合求交集、並集、差集等。集合中包含一組不重複出現且無特性順序的元素,hashset拒絕接受重複的對象。線程

hashset<T>中的值不能重複且沒有順序。設計

hashset<T>的容量會按需自動添加。對象

3.dictionaryrem

dictionary表示鍵和值的集合。

dictionary<string,string>是一個泛型,它自己有集合的功能,有時候能夠把它當作數組,它的結構是這樣的dictionary<[key],[value]>,它的特色是存入對象是須要與[key]值一一對應的存入該泛型,經過某一個必定的[key]去找到對應的值

4.hashtable和dictionary的區別:

hashtable不支持泛型,而dictionary支持泛型。

hashtable的元素屬於object類型,因此在存儲和檢索值類型時一般發生裝箱和拆箱的操做,因此你可能須要進行一些類型轉換的操做,而對於int、float這些值類型還須要進行裝箱等操做,很是耗時。

單線程程序中推薦使用dictionary,有泛型有事,且讀取速度較快,容量利用更充分。多線程程序中推薦使用hashtable,默認的hashtable容許單線程寫入,多線程讀取,對hashtable進一步調用synchronize方法能夠得到安全線程安全的類型,而dictionary非線程安全,必須人爲使用lock語句進行保護,效率大減。

在經過代碼測試的時候發現key是整數型dictionary的效率比hashtable快,若是key是字符串型,dictionary的效率比hashtable快。

相關文章
相關標籤/搜索