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

描述: 哈希表存放 key、values ,key值可以用于快速调取用,values 对应object类型,也就是说所有类型。

实例:

1.HashTable存放学生的成绩

1Hashtable ht1 = new Hashtable(); //创建一个Hashtable实例 2 ht1.Add("张三", "100"); //添加keyvalue键值对 3 ht1.Add("李四", "100"); 4 ht1.Add("王五", "100"); 5 ht1.Add("赵六", "200"); 6 string capital1 = (string)ht["王五"];//根据Key值获取信息 7 ht.Remove("赵六"); //移除一个keyvalue键值对 ht.Clear(); //移除所有元素 8 object value2 = ht["赵六"];//直接根据key取值,判断类型在进行转化 9 if (value2 is string) 10 { 11 12 } 13 foreach (DictionaryEntry de in ht) //ht为一个Hashtable实例,遍历哈希表 object对象 14 { 15 Control cc = (Control)de.Value; 16 } 17 //添加数据时Hashtable快。频繁调用数据时Dictionary快。

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

1Stopwatch sw = new Stopwatch(); 2Hashtable hashtable = new Hashtable(); 3Dictionary<string, int> dictionary = new Dictionary<string, int>(); 4int countNum = 1000000; 5 6sw.Start(); 7for (int i = 0; i < countNum; i++) 8{ 9 hashtable.Add(i.ToString(), i); 10} 11sw.Stop(); 12Console.WriteLine(sw.ElapsedMilliseconds); //输出: 744 13 14sw.Restart(); 15for (int i = 0; i < countNum; i++) 16{ 17 dictionary.Add(i.ToString(), i); 18} 19sw.Stop(); 20Console.WriteLine(sw.ElapsedMilliseconds); //输出: 489 21 22sw.Restart(); 23for (int i = 0; i < countNum; i++) 24{ 25 hashtable.ContainsKey(i.ToString()); 26} 27sw.Stop(); 28Console.WriteLine(sw.ElapsedMilliseconds); //输出: 245 29 30sw.Restart(); 31for (int i = 0; i < countNum; i++) 32{ 33 dictionary.ContainsKey(i.ToString()); 34} 35sw.Stop(); 36Console.WriteLine(sw.ElapsedMilliseconds); //输出: 192

Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

IE7、IE8、IE9对min

问题:    IE7、IE8、IE9对minheight不识别,其他无问题解决:   box{width:100px;height:35px;}   htmlbodybox{width:auto;height:auto;width:100px;minheight:35px;} 实例: