C#中Hashtable和Dictionary的区别与用法示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#中Hashtable和Dictionary的区别与⽤法⽰例
前⾔
在.NET Framework中,Hashtable是System.Collections命名空间提供的⼀个容器,⽤于处理和表现类似keyvalue的键值对,其中key通常可⽤来快速查找,同时key是区分⼤⼩写;value⽤于存储对应于key的值。

Hashtable中keyvalue键值对均为object类型,所以Hashtable可以⽀持任何类型的keyvalue键值对.
Hashtable与Dictionary,都是key/value键值对的形式,区别在于Hashtable的键值是object(DictionaryEntry),值类型,数据排列是乱序的;⽽Dictionary是泛型(KeyValuePair<T, T>),引⽤类型,按插⼊顺序排列数据
Hashtable和Dictionary都是.Net下的表⽰键值对的集合,那么我们在使⽤中该选择Hashtable还是Dictionary?
下边我们看看他们之间的区别:
1、Dictionary<K,V>在使⽤中是顺序存储的,⽽Hashtable由于使⽤的是哈希算法进⾏数据存储,是⽆序的。

2、Dictionary的key和value是泛型存储,Hashtable的key和value都是object
3、Dictionary是泛型存储,不需要进⾏类型转换,Hashtable由于使⽤object,在存储或者读取值时都需要进⾏类型转换,所以⽐较耗时
4、单线程程序中推荐使⽤ Dictionary, 有泛型优势, 且读取速度较快, 容量利⽤更充分。

多线程程序中推荐使⽤ Hashtable, 默认的 Hashtable 允许单线程写⼊, 多线程读取, 对 Hashtable 进⼀步调⽤ Synchronized() ⽅法可以获得完全线程安全的类型. ⽽Dictionary ⾮线程安全, 必须⼈为使⽤ lock 语句进⾏保护, 效率⼤减。

5、在通过代码测试的时候发现key是整数型Dictionary的效率⽐Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。

对于如何进⾏选择,个⼈倾向于使⽤Dictionary,原因是:
1、Dictionary是可排序的,Hashtable如果想排序还需要采⽤别的⽅式进⾏
2、Dictionary有泛型优势,效率要⾼
Hashtable⽤法举例:
Hashtable hashtable = new Hashtable();
hashtable.Add("id", "BH0001");
hashtable.Add("name", "TM");
hashtable.Add("sex", "男");
Console.WriteLine("\t 键\t 值");
foreach (DictionaryEntry dicEntry in hashtable)
Console.WriteLine("\t " + dicEntry.Key + "\t " + dicEntry.Value);
运⾏结果:
Dictionary⽤法举例:
Dictionary<string,string> dictionary = new Dictionary<string, string>();
dictionary.Add("id", "BH0001");
dictionary.Add("name", "TM");
dictionary.Add("sex", "男");
Console.WriteLine("\t 键\t 值");
foreach (var dic in dictionary)
Console.WriteLine("\t " + dic.Key + "\t " + dic.Value);
运⾏结果:
C# .net 3.5 以上的版本引⼊ Linq 后,字典Dictionary排序变得⼗分简单,⽤⼀句类似 sql 数据库查询语句即可搞定;不过,.net 2.0 排序要稍微⿇烦⼀点。

下⾯举例说明dictionary的排序⽅法:
dictionary按值value排序
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("index.html", 50);
dic.Add("product.html", 13);
dic.Add("aboutus.html", 4);
dic.Add("online.aspx", 22);
dic.Add("news.aspx", 18);
private static void DictonarySort(Dictionary<string, int> dic)
{
var dicSort = from objDic in dic orderby objDic.Value descending select objDic;
foreach (KeyValuePair<string, int> kvp in dicSort)
Console.WriteLine(kvp.Key + ":" + kvp.Value );
}
 排序结果:
index.html:50
online.aspx:22
news.aspx:18
product.html:13
aboutus.html:4
上述代码是按降序(倒序)排列,如果想按升序(顺序)排列,只需要把变量 dicSort 右边的 descending 去掉即可。

C# dictionary key 排序
如果要按 Key 排序,只需要把变量 dicSort 右边的 objDic.Value 改为 objDic.Key 即可。

总结
到此这篇关于C#中Hashtable和Dictionary的区别与⽤法的⽂章就介绍到这了,更多相关C# Hashtable和Dictionary区别内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

相关文档
最新文档