[ASP.NET] Dictionary 和 Hashtable 区别
Dictionary和Hashtable 是两个比较常用的表示键/值的集合,两者在实际使用过程中有何区别呢?
具体区别如下:
1. Hashtable不支持泛型,而Dictionary支持泛型。
2. Hashtable中的元素值为Object类型,所以在存储或检索值类型时通常会发生装箱和拆箱的操作,非常耗时。
3. 单线程中推荐使用Dictionary,有泛型优势。多线程中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型,而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。
4. 在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。
/// <summary>
/// key为整型,Dictionary和Hashtable效率比较
/// </summary>
static void IntMethod()
{
Console.WriteLine("Key为整型,Dictionary和Hashtable查询性能比较:"); int count = ;
Dictionary<int, int> dictionary = new Dictionary<int, int>();
Hashtable hashtable = new Hashtable(); for (int i = ; i < count; i++)
{
dictionary.Add(i, i);
hashtable.Add(i, i);
} Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = ; i < count; i++)
{
int value = dictionary[i];
}
stopwatch.Stop();
Console.WriteLine("Dictionary:" + stopwatch.ElapsedMilliseconds); stopwatch = Stopwatch.StartNew();
for (int i = ; i < count; i++)
{
object value = hashtable[i];
}
stopwatch.Stop();
Console.WriteLine("Hashtable:" + stopwatch.ElapsedMilliseconds);
}
/// <summary>
/// Key为字符型,Dictionary和Hashtable查询性能比较
/// </summary>
static void StringMethod()
{
Console.WriteLine("Key为字符型,Dictionary和Hashtable查询性能比较:"); int count = ;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
Hashtable hashtable = new Hashtable(); for (int i = ; i < count; i++)
{
dictionary.Add(i.ToString(), "String");
hashtable.Add(i, i);
} Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = ; i < count; i++)
{
string value = dictionary[i.ToString()];
}
stopwatch.Stop();
Console.WriteLine("Dictionary:" + stopwatch.ElapsedMilliseconds); stopwatch = Stopwatch.StartNew();
for (int i = ; i < count; i++)
{
object value = hashtable[i.ToString()];
}
stopwatch.Stop();
Console.WriteLine("Hashtable:" + stopwatch.ElapsedMilliseconds);
}
结果如下:

参考:
http://www.cnblogs.com/akwwl/p/3680376.html
[ASP.NET] Dictionary 和 Hashtable 区别的更多相关文章
- dictionary 和 hashtable 区别
区别:1,Dictionary支持泛型,而Hashtable不支持. 2,Dictionary没有装填因子(Load Facto)概念,当容量不够时才扩容(扩容跟Hashtable一样,也是两倍于当前 ...
- Dictionary和Hashtable的一些异同
Dictionary和Hashtable 区别: Dictionary和Hashtable 区别 Dictionary Hashtable 支持范型 不支持 需要自己做线程同步 通过调用 Synch ...
- HashMap和HashTable区别【转载】
今天看到的HashMap和HashTable区别介绍,收藏留着学习. 出处:http://www.importnew.com/24822.html 代码版本 JDK每一版本都在改进.本文讨论的Hash ...
- 【算法】272-每周一练 之 数据结构与算法(Dictionary 和 HashTable)
这是第五周的练习题,上周忘记发啦,这周是复习 Dictionary 和 HashTable. 下面是之前分享的链接: [算法]200-每周一练 之 数据结构与算法(Stack) [算法]213-每周一 ...
- 每周一练 之 数据结构与算法(Dictionary 和 HashTable)
这是第五周的练习题,上周忘记发啦,这周是复习 Dictionary 和 HashTable. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与算法( ...
- C#中Dictionary,Hashtable,List的比较及分析
一. Dictionary与Hashtable Dictionary与Hashtable都是.Net Framework中的字典类,能够根据键快速查找值 二者的特性大体上是相同的,有时可以把Dicti ...
- HashMap和HashTable区别
HashMap和HashTable区别 HashMap--->允许控制/线程安全 HashTable-->线程不安全
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
1. HashMap和Hashtable区别 ? • Hashtable:线程安全,效率低.不允许null键和null值 • HashMap:线程不安全,效率高.允许null键和null值 packa ...
- C#、.NET和ASP.NET三者之间的区别
刚毕业后出去找工作面试的时候就遇到这个问题!.回答不上来.回来网上查的如下: 那么 .NET.C#和ASP.NET这三者之间区别不清楚,到底它们之间有什么联系呢? 1..NET是一个平台,一个抽象的平 ...
随机推荐
- POJ3687 Labeling Balls(拓扑排序\贪心+Floyd)
题目是要给n个重量1到n的球编号,有一些约束条件:编号A的球重量要小于编号B的重量,最后就是要输出字典序最小的从1到n各个编号的球的重量. 正向拓扑排序,取最小编号给最小编号是不行的,不举出个例子真的 ...
- BZOJ3249 : [ioi2013]game
线段树套Treap 外层的线段树需要动态开节点 内层Treap需要注意的是,相同y坐标的点不一定是同一个点,所以需要再次离散 空间$O(n\log n)$ 时间$O(n\log^2n)$ #inclu ...
- 浅谈Apache Spark的6个发光点(CSDN)
Spark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析.Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发开发,其核心部分的代码只有63个Scala文件 ...
- Java多线程初学者指南系列教程
转自:http://developer.51cto.com/art/200911/162925.htm 51cto 本系列来自NokiaGuy的“真的有外星人吗”博客,系列名称为<Java多线程 ...
- SQLyog 配置SQL Assitant
在上一篇博文“MySQL配置SQL Assistant提示”中,我介绍了配置SQL Assitant自带的SQL Editor连接MySQL数据库的配置,但是试用两天后发现,SQL Editor不支持 ...
- 【转载】Erlang 中 link 和 monitor 的区别
Link and Monitor differences 原文地址 Introduction link/1 and monitor/2 are 2 different ways of notifyin ...
- unserialize函数中的参数是否是污染数据
1.原理 在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件.这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出.php中就 ...
- CSS3:过渡大全
代码 地址:http://jsbin.com/moquyesumi/edit?html,output <!DOCTYPE HTML> <html> <head> & ...
- ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
实现持久登录,即用户在登录时,勾选了"记住我"之后,无论是否关闭浏览器,只要不退出登录,在指定的时间内始终保持登录状态(缺点是在另一台电脑上登录过后,之前那台电脑就不能继续保持登录 ...
- ajax中文传送到模板显示为null
问题: 名称空间声明语句必须是第一个语句中的脚本: Fatal error: Namespace declaration statement has to be the very first stat ...