C# Hashtable(哈希表)

Hashtable 是一個(gè)存儲(chǔ)鍵值對(duì)的非泛型集合,類似于泛型 Dictionary <TKey,TValue> 集合。它通過計(jì)算每個(gè)鍵的哈希碼優(yōu)化查找,并在內(nèi)部將其存儲(chǔ)在不同的 bucket 中,然后在訪問值時(shí)匹配指定鍵的哈希碼。

哈希表特性

  • Hashtable 存儲(chǔ)鍵值對(duì)。

  • 屬于System.Collection命名空間。

  • 實(shí)現(xiàn)IDictionary接口。

  • 鍵必須是唯一的,不能為null。

  • 值可以為null或重復(fù)。

  • 可以通過在索引器中傳遞相關(guān)鍵來訪問值,例如 myHashtable[key]

  • 元素作為 DictionaryEntry 對(duì)象存儲(chǔ)。

創(chuàng)建哈希表(HashTable)

下面的示例演示如何創(chuàng)建哈希表和添加元素。

Hashtable numberNames = new Hashtable();
numberNames.Add(1,"One"); //使用Add()方法添加鍵/值
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");

//以下引發(fā)運(yùn)行時(shí)異常:已添加鍵。run-time exception: key already added.
//numberNames.Add(3, "Three"); 

foreach(DictionaryEntry de in numberNames)
    Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);
		
//使用collection-initializer語法創(chuàng)建Hashtable
var cities = new Hashtable(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
};
		
foreach(DictionaryEntry de in cities)
    Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);

Hashtable集合可以包括字典的所有元素,如下所示。

Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "one");
dict.Add(2, "two");
dict.Add(3, "three");

Hashtable ht = new Hashtable(dict);

更新哈希表

通過在索引器中傳遞一個(gè)鍵,可以從 Hashtable 中檢索現(xiàn)有鍵的值。Hashtable 是一個(gè)非泛型集合,因此在檢索它時(shí)必須鍵入強(qiáng)制轉(zhuǎn)換值。

//使用collection-initializer語法創(chuàng)建Hashtable
var cities = new Hashtable(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
};
    
string citiesOfUK = (string) cities["UK"]; //轉(zhuǎn)換為字符串
string citiesOfUSA = (string) cities["USA"]; //轉(zhuǎn)換為字符串

Console.WriteLine(citiesOfUK);
Console.WriteLine(citiesOfUSA);

cities["UK"] = "Liverpool, Bristol"; // 更新 UK 的值
cities["USA"] = "Los Angeles, Boston"; //更新 USA 的值

if(!cities.ContainsKey("France")){
    cities["France"] = "Paris";
}

刪除哈希表中的元素

Remove ()方法刪除與 Hashtable 中指定的值匹配的鍵值。如果在 Hashtable 中沒有找到指定的鍵,則拋出 KeyNotfoundException,因此在刪除之前使用 ContainsKey ()方法檢查現(xiàn)有的鍵。

使用Clear()方法可以一次性刪除所有元素。

var cities = new Hashtable(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
};

cities.Remove("UK"); // 刪除UK
//cities.Remove("France"); //引發(fā)運(yùn)行時(shí)異常:KeyNotFoundException

if(cities.ContainsKey("France")){ // 取出鍵之前先檢查一下
    cities.Remove("France");
}

cities.Clear(); //刪除所有元素

哈希表類層次結(jié)構(gòu)

下圖說明了Hashtable類的層次結(jié)構(gòu)。

C#哈希表
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清