共用方式為


Hashtable 和 Dictionary 集合型別

System.Collections.Hashtable 類別及 System.Collections.Generic.Dictionary<TKey, TValue>System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue> 泛型類別實作 System.Collections.IDictionary 介面。 Dictionary<TKey, TValue> 泛型類別也實作 IDictionary<TKey, TValue> 泛型介面。 因此,這些集合中的每個元素都是一組索引鍵/值組。

Hashtable 物件是由包含集合中元素的 Bucket 所組成。 Bucket 是 Hashtable 內元素的虛擬子群組,可以讓大部分集合中的搜尋和擷取工作更容易、更快速。 每一個 Bucket 都有關聯的雜湊程式碼,這個雜湊程式碼是使用雜湊函式並根據項目的索引鍵而產生。

泛型 HashSet<T> 類別是用於包含唯一項目的未排序集合。 如需這個集合的詳細資訊,請參閱 HashSet 集合型別

雜湊函式為根據索引鍵來傳回數值雜湊程式碼的演算法。 索引鍵是被儲存物件的某些屬性值。 雜湊函式必須永遠替相同索引鍵傳回相同雜湊程式碼。 雜湊函式有可能為兩個不同索引鍵產生相同雜湊程式碼,但替每一個唯一索引鍵產生唯一雜湊程式碼的雜湊函式在從雜湊表擷取元素時會產生較佳效能。

Hashtable 中做為項目的每一個物件,都必須能夠使用 GetHashCode 方法的實作來產生本身的雜湊程式碼。 然而,您也可以使用接受 IHashCodeProvider 實作做為其中一個參數的 Hashtable 建構函式 (Constructor),將雜湊函式指定給 Hashtable 中的所有元素。

當物件加入至 Hashtable 時,它是儲存在與物件雜湊程式碼相符之雜湊程式碼相關的 Bucket 中。 在 Hashtable 內搜尋值時,雜湊程式碼會為該值產生,並且會搜尋與該雜湊程式碼相關的 Bucket。

例如,字串的雜湊函式可能接受字串中各個字元的 ASCII 碼,並將它們加起來以產生雜湊程式碼。 字串 "picnic" 將會有不同於字串 "basket" 之雜湊程式碼的雜湊程式碼;因此,字串 "picnic" 和 "basket" 將會放在不同雜湊桶。 對照之下,"stressed" 和 "desserts" 則會具有相同雜湊程式碼,並且會放在相同雜湊桶中。

Dictionary<TKey, TValue>ConcurrentDictionary<TKey, TValue> 類別的功能與 Hashtable 類別相同。 特定型別 (不是 Object) 的 Dictionary<TKey, TValue> 所提供的效能高於值型別的 Hashtable。 這是因為 Hashtable 的項目是 Object 型別,因此當您儲存或擷取值型別時,通常會發生 boxing 和 unboxing。 當有多個執行緒可能同時存取集合時,應該使用 ConcurrentDictionary<TKey, TValue> 類別。

請參閱

參考

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

System.Collections.Generic.IDictionary<TKey, TValue>

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>

概念

HashSet 集合型別

其他資源

常用的集合型別