C#中哈希表(HashTable)的用法详解

来源:互联网 发布:贵阳java招聘信息 编辑:程序博客网 时间:2024/06/05 04:06

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
文章转自http://www.cnblogs.com/xpvincent/archive/2013/01/15/2860841.html;;
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 落枕怎么办简单快速的有效方法 老板评奖时偏把我落下怎么办 手机home键坏了怎么办 庙里求的葫芦丢了怎么办 判了抚养费不给怎么办 百度账号密码忘了怎么办 百度云会员到期后文件怎么办 百度网盘存储空间不足怎么办 网赌一天输14万怎么办 在部队训练伤了怎么办 cdrx6激活时不能继续了怎么办 大学毕业一年后找不到工作怎么办 农村乱收垃圾费怎么办 信用卡额度低不想要怎么办 qq公告有敏感词怎么办 qq群公告敏感词怎么办 轿车加了假汽油怎么办? 电信4g变成3g怎么办 电信流量超过40g怎么办 联通卡网络信号很差怎么办 电马桶马达坏了怎么办 我这么好看别人看不到怎么办 户口打回原籍不接受怎么办 小电充电宝丢失怎么办 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办 哺乳期乳房一个大一个小怎么办 我喝酒后喂奶了怎么办 磁盘目录不具有读写权限怎么办 玻纤网格布扎手怎么办 模拟城市5细菌太多怎么办