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
hashset<T>類主要是設計用來做高性能集運算的,例如對兩個集合求交集、並集、差集等。集合中包含一組不重復出現且無特性順序的元素,hashset拒絕接受重復的對象。
hashset<T>中的值不能重復且沒有順序。
hashset<T>的容量會按需自動添加。
3.dictionary
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快。