這篇文章主要介紹“C#中哈希表的用法”,在日常操作中,相信很多人在C#中哈希表的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中哈希表的用法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)是專業(yè)的漳縣網(wǎng)站建設(shè)公司,漳縣接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行漳縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
1. 哈希表(HashTable)簡述
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似keyvalue的鍵值對,其中key通??捎脕砜焖俨檎?,同時key是區(qū)分大小寫;value用于存儲對應(yīng)于key的值。Hashtable中keyvalue鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對.
2. 什么情況下使用哈希表
(1)某些數(shù)據(jù)會被高頻率查詢
(2)數(shù)據(jù)量大
(3)查詢字段包含字符串類型
(4)數(shù)據(jù)類型不唯一
3. 哈希表的使用方法
哈希表需要使用的namespace
using System.Collections; using System.Collections.Generic;
哈希表的基本操作:
//添加一個keyvalue鍵值對: HashtableObject.Add(key,value); //移除某個keyvalue鍵值對: HashtableObject.Remove(key); //移除所有元素: HashtableObject.Clear(); // 判斷是否包含特定鍵key: HashtableObject.Contains(key);
控制臺程序例子:
using System; using System.Collections; //file使用Hashtable時,必須引入這個命名空間 class Program { public static void Main() { Hashtable ht = new Hashtable(); //創(chuàng)建一個Hashtable實例 ht.Add("北京", "帝都"); //添加keyvalue鍵值對 ht.Add("上海", "魔都"); ht.Add("廣州", "省會"); ht.Add("深圳", "特區(qū)"); string capital = (string)ht["北京"]; Console.WriteLine(ht.Contains("上海")); //判斷哈希表是否包含特定鍵,其返回值為true或false ht.Remove("深圳"); //移除一個keyvalue鍵值對 ht.Clear(); //移除所有元素 } }
哈希表中使用多種數(shù)據(jù)類型的例子:
using System; using System.Collections; class Program { static Hashtable GetHashtable() { Hashtable hashtable = new Hashtable(); hashtable.Add("名字", "小麗"); hashtable.Add("年齡", 22); return hashtable; } static void Main() { Hashtable hashtable = GetHashtable(); string name = (string)hashtable["名字"]; Console.WriteLine(name); int age = (int)hashtable["年齡"]; Console.WriteLine(age); } }
當(dāng)獲取哈希表中數(shù)據(jù)時,如果類型聲明的不對,會出現(xiàn)InvalidCastException錯誤。使用as-statements可以避免該錯誤。
using System; using System.Collections; using System.IO; class Program { static void Main() { Hashtable hashtable = new Hashtable(); hashtable.Add(100, "西安"); // 能轉(zhuǎn)換成功 string value = hashtable[100] as string; if (value != null) { Console.WriteLine(value); } // 轉(zhuǎn)換失敗,獲取的值為null,但不會拋出錯誤。 StreamReader reader = hashtable[100] as StreamReader; if (reader == null) { Console.WriteLine("西安不是StreamReader型"); } // 也可以直接獲取object值,再做判斷 object value2 = hashtable[100]; if (value2 is string) { Console.Write("這個是字符串型: "); Console.WriteLine(value2); } } }
4. 遍歷哈希表
遍歷哈希表需要用到DictionaryEntry Object,代碼如下:
for(DictionaryEntry de in ht) //ht為一個Hashtable實例 { Console.WriteLine(de.Key); //de.Key對應(yīng)于keyvalue鍵值對key Console.WriteLine(de.Value); //de.Key對應(yīng)于keyvalue鍵值對value }
遍歷鍵
foreach (int key in hashtable.Keys) { Console.WriteLine(key); }
遍歷值
foreach (string value in hashtable.Values) { Console.WriteLine(value); }
5. 對哈希表進(jìn)行排序
對哈希表按key值重新排列的做法:
ArrayList akeys=new ArrayList(ht.Keys); akeys.Sort(); //按字母順序進(jìn)行排序 foreach(string key in akeys) { Console.WriteLine(key + ": " + ht[key]); //排序后輸出 }
6. 哈希表的效率
System.Collections下的哈希表(Hashtable)和System.Collections.Generic下的字典(Dictionary)都可用作lookup table,下面比較一下二者的執(zhí)行效率。
Stopwatch sw = new Stopwatch(); Hashtable hashtable = new Hashtable(); Dictionarydictionary = new Dictionary (); int countNum = 1000000; sw.Start(); for (int i = 0; i < countNum; i++) { hashtable.Add(i.ToString(), i); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 744 sw.Restart(); for (int i = 0; i < countNum; i++) { dictionary.Add(i.ToString(), i); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 489 sw.Restart(); for (int i = 0; i < countNum; i++) { hashtable.ContainsKey(i.ToString()); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 245 sw.Restart(); for (int i = 0; i < countNum; i++) { dictionary.ContainsKey(i.ToString()); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 192
由此可見,添加數(shù)據(jù)時Hashtable快。頻繁調(diào)用數(shù)據(jù)時Dictionary快。
結(jié)論:Dictionary
到此,關(guān)于“C#中哈希表的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞標(biāo)題:C#中哈希表的用法
文章鏈接:http://weahome.cn/article/goihdp.html