1.哈希表簡述
哈希表是種數據結構,它可以提供快速的插入操作和查找操作。第一次接觸哈希表時,它的優點多得讓人難以置信。不論哈希表中有多少數據,插入和刪除(有時包括側除)只需要接近常量的時間即0(1)的時間級。哈希表也有一些缺點它是基於數組的,數組創建后難於擴展某些哈希表被基本填滿時,性能下降得非常嚴重,所以程序雖必須要清楚表中將要存儲多少數據(或者准備好定期地把數據轉移到更大的哈希表中,這是個費時的過程。
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現類似keyvalue的鍵值對,其中key通常可用來快速查找,同時key是區分大小寫;value用於存儲對應於key的值。Hashtable中keyvalue鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對.
2.哈希表用法
1)命名空間
using System.Collections; using System.Collections.Generic;
2)基本操作
//添加一個keyvalue鍵值對: HashtableObject.Add(key,value); //移除某個keyvalue鍵值對: HashtableObject.Remove(key); //移除所有元素: HashtableObject.Clear(); // 判斷是否包含特定鍵key: HashtableObject.Contains(key);
3)例子
Hashtable ht = new Hashtable(); ht.Add("1706010315", "小張"); ht.Add("1706010316", "小王"); ht.Add("1706010317", "小李"); ht.Add("1706010318", "小紅"); string mate = (string)ht["1706010315"]; //根據鍵值取元素 bool exist = ht.Contains("1706010316"); //哈希表中是否含有特定鍵 ht.Remove("1706010315"); //移除一個 ht.Clear(); //移除全部
4)類型轉換
ht.Add("1806010712", "小強"); //能轉換成功 string value = ht["1806010712"] as string; if (value != null) { Console.WriteLine(value); } //不能轉換成功 獲取的值變為null StreamReader reader = ht["1806010712"] as StreamReader; if (reader == null) { Console.WriteLine("小強不是streamread型"); } //先獲取object型 再做判斷 Object value2 = ht["1806010712"]; if(value2 is string) { Console.WriteLine("這個是字符串型"); }
5)遍歷
//遍歷哈希表 foreach(DictionaryEntry de in ht) { Console.WriteLine(de.Key); Console.WriteLine(de.Value); } //遍歷鍵 foreach(string key in ht.Keys) { Console.WriteLine(key); } //遍歷值 foreach(string value3 in ht.Values) { Console.WriteLine(value3); }
6)排序
ArrayList akeys=new ArrayList(ht.Keys); akeys.Sort(); //按字母順序進行排序 foreach(string key in akeys) { Console.WriteLine(key + ": " + ht[key]); //排序后輸出 }