c# 哈希表

最近翻开一下c#的基础书,发现c#的哈希表我重来没用过。

理解一番,觉得和dictionary有点相像,都是键值对(key-value)的形式。

网上查询了一番,下面说说简单介绍下哈希表Hashtable 。

哈希表(hashtable)和字典表(dictionary)效率对比:

Hashtable hashtable = new Hashtable();
Dictionary<string, int> dictionary = new Dictionary<string, int>();
int countNum = 1000000;
DateTime startTime;
DateTime endTime;
startTime = DateTime.Now;
for (int i = 0; i < countNum; i++)
{
hashtable.Add(i.ToString(), i);
}
endTime = DateTime.Now;
Console.WriteLine("给哈希表赋值:" + (endTime - startTime).Milliseconds); //输出: 796

startTime = DateTime.Now;
for (int i = 0; i < countNum; i++)
{
dictionary.Add(i.ToString(), i);
}
endTime = DateTime.Now;
Console.WriteLine("字典类型赋值:" + (endTime - startTime).Milliseconds); //输出: 448

startTime = DateTime.Now;
for (int i = 0; i < countNum; i++)
{
hashtable.ContainsKey(i.ToString());
}
endTime = DateTime.Now;
Console.WriteLine("输出哈希表值:" + (endTime - startTime).Milliseconds); //输出: 268

startTime = DateTime.Now;
for (int i = 0; i < countNum; i++)
{
dictionary.ContainsKey(i.ToString());
}
endTime = DateTime.Now;
Console.WriteLine("输出字典类型值:" + (endTime - startTime).Milliseconds); //输出: 183

结论:添加数据时,dictionary快,频繁调用数据时Dictionary快。Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable。

 

 

由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

不过有人认为:我认为应该始终使用Dictionary<K, V>,即使要用Hashtable了,也可以用Dictionary<object, object>来替代。

转载于:https://www.cnblogs.com/BeeSnow/p/7989834.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值