Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

The usage of Hash Table in C #

2025-03-29 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >

Share

Shulou(Shulou.com)06/02 Report--

这篇文章主要介绍"C#中哈希表的用法",在日常操作中,相信很多人在C#中哈希表的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C#中哈希表的用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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 dictionary = 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); //输出: 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是值类型时,其速度远远超过Hashtable。

到此,关于"C#中哈希表的用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Internet Technology

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report