簡體   English   中英

B / w Hashtable,Dictionary和KeyValuePair有什么區別?

[英]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類已被引入以供通用。

之間的區別HashtableDictionaryHashtable是不是一個通用類-這兩者的鍵和值的類型的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM