[英]What is the difference between KeyValuePair and Hashtable in .NET?
[英]What are the differences b/w Hashtable, Dictionary and KeyValuePair?
我在代碼中使用Dictionary,但我的同事使用Hashtable。 MSDN表示他們在鍵值對上工作,並且Hashtable和Dictionary的示例在MSDN上相同。
那么它們彼此之間有什么不同?它們中最好的是它們還是適合不同的場合?
Hashtable
是一個無類型的關聯容器,它使用DictionaryEntry
類通過其鍵值對返回枚舉結果。
Dictionary<K,T>
是C#2.0中引入的Hashtable
的通用替代。 它使用KeyValuePair<K,T>
通用對象表示其鍵值對。
這些天,您唯一能看到Hashtable
地方就是在引入泛型之前必須在.NET 1.1上運行的舊代碼。 由於兼容性原因,它一直保留着,但是您應該盡可能選擇Dictionary<K,T>
。
KeyValuePair
是存儲在Hashtable
(或Dictionary
)中的數據單位。 它們彼此不相等。
鍵值對包含一個鍵和一個值。 字典或哈希表包含許多鍵與其關聯值的映射。
當您要將兩個相關的信息存儲為一個單元時,尤其是當一個以識別方式與另一個相關時(例如1234 =>“ David Smith”), KeyValuePair
很有用。 它們也是您迭代字典時得到的東西。 在.NET 4.0中,它們實際上僅是要在Dictionary中內部使用-Tuple類已被引入以供通用。
之間的區別Hashtable
和Dictionary
是Hashtable
是不是一個通用類-這兩者的鍵和值的類型的Object
。 Dictionary
是通用的,在任何新開發中都應Hashtable
使用Hashtable
。
字典是類型化的哈希表。 如果您知道鍵和值的數據類型,請出於性能考慮使用字典(避免強制轉換)。
一個主要區別是Hashtable
是線程安全的,而Dictionary
不是。
該文件說:
Hashtable
是線程安全的,可供多個讀取器線程和一個寫入線程使用。 當只有一個線程執行寫(更新)操作時,它對於多線程使用是線程安全的,只要將寫程序序列化到Hashtable
,就可以進行無鎖讀取。 為了支持多個編寫器,只要沒有線程讀取Hashtable對象,就必須通過Synchronized
方法返回的包裝器完成Hashtable
上的所有操作。
將此與Dictionary
文檔進行對比:
只要不修改集合
Dictionary(Of TKey, TValue)
可以同時支持多個閱讀器。
KeyValuePair<TKey, TValue>
是Dictionary<TKey, TValue>
使用的類型。 遍歷Dictionary中的項目時,將獲得一系列KeyValuePair
對象。
以下是一些示例用法:
var dict = new Dictionary<string, int>();
dict.Add("Hello", 1);
foreach (KeyValuePair<string, int> entry in dict)
{
string s = entry.Key;
int i = entry.Value;
// More logic here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.