上海出名软件公司面试题(hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些?) 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Dictionary<TKey,TValue>一出Hashtable就被淘汰了...你说哪个性能高?至于原理...去看MSDN... hashtable里存的对象全部是object类型 ,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,hashtable对存入的类型没有限制 , 因此在读取转换类型时容易出错,dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更高,因为不需要转换类型,所以不会出现hashtable里的转换类型错误而报出程序异常. hashtable 性能好些,我只知道这点 这楼的是看错了1楼的答案才乱讲的吧。1楼的意思是:出了Dict后上hastable就被淘汰了。当然是Dict要好得多。 简单点说在 hashtable所有的对象基于HASH算法管理,但它是无类型信息的都只是一种类型:object,所以你可能需要进行一些类型转换的操作,即浪费时间又有可能出错。而且对于int,float这些值类型还需要进行装箱等操作,非常耗时。对于Dict<TKey,TValue>是由CLR支持泛型操作,速度快,没有类型转换操作,即完全是类型安全的。 你说的Dictionary 应该是.net2.0里的泛型类,性能肯定比只能放object的hashtable好些 Dictionary支持泛型,Hashtable不支持 这是我知道的最大的区别 由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代. [1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分. [2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减. [3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便. Hashtable内存放的必须是Object,使用时需要强转类型。Dictionary支持泛型,无需转换。这就是区别,所以性能当然是Dictionary高 dic是泛型,肯定省去拆装箱,对于已经排序和小数据量数据dic效率高很多,其他情况则是hash性能好。 上面的都是才扯淡。为什么IDic性能好啊,你们都没有说出原因,再说装箱和拆箱是在Key和Value都是值类型的情况下才有的。下面是一个国外的程序员的分析。Hashtable不一定比IDic差。http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable datagredview 选中状态颜色 如何赋值..... 如何截获窗口的关闭消息并阻止窗口销毁, 递归算法,为什么在别的机器上运行出错! 关于Remoting的问题。请高手进来帮忙看看。 .net 启始页新闻 需要用到哪些技术? 关于c# form的问题? Infrag的utrlwingrid控件有没有分页功能?或者怎样实现分页? 我想从网页上提取一些数据,并把数据存入数据库!有兴趣的过来看一下! C# 图片上传保存到数据库在从数据库中读出图片 一个关于Session的问题,在线等待~ wince下字符闪烁问题(C#),急!50分 一般C#考试题目是什么
dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更高,因为不需要转换类型,所以不会出现hashtable里的转换类型错误而报出程序异常.
当然是Dict要好得多。
这是我知道的最大的区别
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.