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

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快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM