国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中哈希表(HashTable)用法實例詳解(添加/移除/判斷/遍歷/排序等)

2020-01-24 01:04:53
字體:
來源:轉載
供稿:網友

本文實例講述了C#中哈希表(HashTable)用法。分享給大家供大家參考,具體如下:

1.  哈希表(HashTable)簡述

在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現類似keyvalue的鍵值對,其中key通常可用來快速查找,同時key是區分大小寫;value用于存儲對應于key的值。Hashtable中keyvalue鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對.

2. 什么情況下使用哈希表

(1)某些數據會被高頻率查詢
(2)數據量大
(3)查詢字段包含字符串類型
(4)數據類型不唯一

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(); //創建一個Hashtable實例   ht.Add("北京", "帝都"); //添加keyvalue鍵值對   ht.Add("上海", "魔都");   ht.Add("廣州", "省會");   ht.Add("深圳", "特區");   string capital = (string)ht["北京"];   Console.WriteLine(ht.Contains("上海")); //判斷哈希表是否包含特定鍵,其返回值為true或false   ht.Remove("深圳"); //移除一個keyvalue鍵值對   ht.Clear(); //移除所有元素 }}

哈希表中使用多種數據類型的例子:

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);  }}

當獲取哈希表中數據時,如果類型聲明的不對,會出現InvalidCastException錯誤。使用as-statements可以避免該錯誤。

using System;using System.Collections;using System.IO;class Program{  static void Main()  {  Hashtable hashtable = new Hashtable();  hashtable.Add(100, "西安");  // 能轉換成功  string value = hashtable[100] as string;  if (value != null)  {    Console.WriteLine(value);  }  // 轉換失敗,獲取的值為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對應于keyvalue鍵值對key  Console.WriteLine(de.Value); //de.Key對應于keyvalue鍵值對value}

遍歷鍵

foreach (int key in hashtable.Keys){  Console.WriteLine(key);}

遍歷值

foreach (string value in hashtable.Values){  Console.WriteLine(value);}

5. 對哈希表進行排序

對哈希表按key值重新排列的做法:

ArrayList akeys=new ArrayList(ht.Keys);akeys.Sort(); //按字母順序進行排序foreach(string key in akeys){  Console.WriteLine(key + ": " + ht[key]); //排序后輸出}

6. 哈希表的效率

System.Collections下的哈希表(Hashtable)和System.Collections.Generic下的字典(Dictionary)都可用作lookup table,下面比較一下二者的執行效率。

Stopwatch sw = new Stopwatch();Hashtable hashtable = new Hashtable();Dictionary<string, int> dictionary = new Dictionary<string, int>();int countNum = 1000000;sw.Start();for (int i = 0; i < countNum; i++){  hashtable.Add(i.ToString(), i);}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 744sw.Restart();for (int i = 0; i < countNum; i++){  dictionary.Add(i.ToString(), i);}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 489sw.Restart();for (int i = 0; i < countNum; i++){  hashtable.ContainsKey(i.ToString());}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 245sw.Restart();for (int i = 0; i < countNum; i++){  dictionary.ContainsKey(i.ToString());}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 192

由此可見,添加數據時Hashtable快。頻繁調用數據時Dictionary快。

結論:Dictionary<K,V>是泛型的,當K或V是值類型時,其速度遠遠超過Hashtable。

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#遍歷算法與技巧總結》、《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陕西省| 延安市| 襄城县| 青阳县| 仪陇县| 双城市| 儋州市| 冀州市| 乡宁县| 正阳县| 江口县| 安康市| 磐安县| 汤阴县| 锦屏县| 荥阳市| 瓦房店市| 河曲县| 沙雅县| 视频| 承德县| 启东市| 彭泽县| 白沙| 舞阳县| 三门峡市| 武山县| 茌平县| 景宁| 东港市| 邯郸县| 教育| 安宁市| 桓台县| 洪湖市| 托里县| 蒲江县| 乌鲁木齐市| 南陵县| 怀化市| 隆化县|