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

几种C#框架提供的数据结构对单值查找的效率比较->http://www.cnblogs.com/eaglet/archive/2008/10/23/1317893.html
我个人是觉得,无论什么时候,都应该使用Dictionary<K,V>,理由如下:
1、Dic是类型安全的,这有助于我们写出更健壮更具可读性的代码,而且省却我们强制转化的麻烦。这个相信大家都明白。
2、Dic是泛行的,当K或V是值类型时,其速度远远超过Hashtable。这个大家对值类型与引用类型有所了解的话也会明白。
3、如果K和V都是引用类型,如eaglet所测,Hashtable比Dic更快,这里我要指出,eaglet所做的测试是有问题的。原因在于Hashtable与Dic采用的是不同的数据结构。eaglet的“Dictionary 由于在Hashtable基础上封装了一层”这个说法是不对的。

Dictionary 调用 Add 方法之前使用 ContainsKey 方法测试某个键是否存在,否则得到一个KeyNotFoundException。
当程序频繁尝试字典中不存在的键时,使用 TryGetValue 方法来检索值,这种方法是一种更有效的检索值的方法。

具体我也不讲了,因为有人(Angel Lucifer)已经讲得很清楚了,引用如下:

http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html
http://www.cnblogs.com/lucifer1982/archive/2008/07/03/1234431.html

Hashtable在指定capacity参数时,它并不只开出capacity个槽的内存空间,而是开出比 capacity / 0.72(默认装填因子) 大的最小素数个槽的空间;而Dic在指定capacity时,是开出 比capacity 大的最小素数个槽的空间。因此可以看到,楼主虽然都指定capacity为10万,而实际上Hashtable的槽的总数远远大于Dic的槽的总数,也就是占用的内存远远大于Dic,因此,如此测试是不公平不公正的,如要公平公正的测试,则应该把Dic的capacity指定为 10万/0.72,请大家再测试其性能。

url:http://www.cnblogs.com/jhh0111/archive/2008/10/23/1318223.html

转载于:https://www.cnblogs.com/zcy_soft/archive/2010/10/02/1841165.html

C#Hashtable与Dictionary性能相关推荐

  1. C#中Hashtable、Dictionary详解以及写入和读取对比

    转载:http://www.cnblogs.com/chengxingliang/archive/2013/04/15/3020428.html 在本文中将从基础角度讲解HashTable.Dicti ...

  2. Hashtable与Dictionary

    以前对于这两个集合类的认识只是停留在是否支持泛型上,这几天趁着看算法导论的机会,把两个类的内部的实现机制好好的了解了一下. Hashtable 和Dictionary从数据结构上来说都属于Hashta ...

  3. C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别

    C#中HashTable.Dictionary.ConcurrentDictionar三者都表示键/值对的集合,但是到底有什么区别,下面详细介绍 一.HashTable HashTable表示键/值对 ...

  4. C# Hashtable和Dictionary区别

    Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别: 1.Dictionary< ...

  5. C#常见容器ArrayList、List、HashSet、Hashtable 、Dictionary、Stack、Queue

    一.ArrayList.List< T >列表和HashSet< T >哈希集 1.简单介绍及区别: 命名空间 System.Collections:ArrayList Sys ...

  6. C#方法,可空类型,数组,集合,ArrayList排序,List,Hashtable和Dictionary

    C#方法 方法的定义: public void/int Compare(int a,int b){ } Program program = new Program(); Console.WriteLi ...

  7. Hashtable和Dictionary 的区别

    Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别: 1.Dictionary< ...

  8. 聊聊C# 中HashTable与Dictionary的区别说明

    哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中ke ...

  9. vb.net 教程 1-14 Hashtable 和 Dictionary比较

    版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的. Hashtable 和 Dictionary 都是一个键值对的集合 其中 Hashtable 包 ...

  10. Hashtable Dictionary[必看]

    1:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的 ...

最新文章

  1. 生物信息课程学习 --- 比对,BLAST,马尔可夫
  2. SURF角点检测(python)
  3. apache2.4配置虚拟主机
  4. 理解Promise规范
  5. getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用
  6. assert函数_悉数Python函数传参的语法糖
  7. 【报告分享】2021大社交趋势观察报告.pdf(附下载链接)
  8. while和do-while的区别
  9. python-普通数据分析-科比职业生涯数据分析
  10. Juniper SRX240 U盘升级junos
  11. MacBook 管理员账户无法删除 解决方法
  12. [闲聊篇]这个世界所谓的28定律
  13. 马化腾:创建生物型组织,让企业组织自我进化
  14. 通过fileProvider接收外部App传递文件路径的一些坑
  15. RE:从零开始的汇编语言_挑好书
  16. 【自学51单片机】3 -- 硬件基础知识(电容、三极管、74HC245、74HC138三八译码器)介绍和闪烁LED小灯
  17. 动态规划:区间动态规划
  18. CentOS 8安装Python3.7.0
  19. Gerrit Trigger配置
  20. 浅析MOS管开关速度影响因素-KIA MOS管

热门文章

  1. 解决Android Studio不停的Indexing的问题
  2. android实现1000次点击,android – AdMob收入和替代方案:展示次数和点击次数[已关闭]...
  3. mysql集群脑裂问题_redis集群怎么解决脑裂问题
  4. python turtle代码示例-Python turtle.left方法代码示例
  5. vue多个html传递参数,vue 项目@change多个参数传值多个事件的操作
  6. 使用 vue_VUE使用ECharts教程
  7. java 批量删除_mybatis批量插入、批量更新和批量删除
  8. adb 连接时候不弹出授权对话框
  9. 第二轮冲次会议第八次
  10. idea 正则表达式替换