为什么在C#中更倾向于使用Dictionary而不是Hashtable?

最近看到上述这样一个问题,觉得很有意思,也可能是很多初学者不理解的一个点,所以,今天,我们就来好好讨论一下,首先,我看来这个问题本身就含有一种歧义性,因为从某种意义上讲,Dictionary(在概念上)是一个哈希表。这样的话,这个问题就被无情的over了,那今天的分享岂不就这样结束了,但俺一贯秉持着只要在我身上花时间,就不让各位老爷空手而归的原则,我们就先把问题简单的改造一下,嘿嘿~……直接问题改为**“为什么我们使用Dictionary<TKey, TValue>类而不是Hashtable类?”**

或许这样就有了周旋的余地,所以接下来,我们就这个问题来探讨一下c#中的DictionaryHashtable

开始前,我们还是先来看一下DictionaryHashtable的基本定义和使用:

var customers = new Dictionary<string, Customer>();  
...  
Customer customer = customers["Tom"];
var customers = new Hashtable();  
...  
Customer customer = customers["Tom"] as Customer;

好了,我们看一下二者的基本使用,现在该具体来认识一下这两位大佛了。

差异

DictionaryHashtable
泛型类型非泛型类型
需要自行进行线程同步通过Synchronized()方法提供线程安全版本
枚举项:KeyValuePair枚举项:DictionaryEntry
较新(>.NET 2.0)较旧(自.NET 1.0起)
位于System.Collections.Generic命名空间位于System.Collections命名空间
请求不存在的键会抛出异常请求不存在的键会返回null
对于值类型可能稍微快一些对于值类型稍慢(需要装箱/拆箱)

相似之处

  • 两者在内部都是哈希表 == 根据键快速访问多项数据
  • 两者都需要不可变且唯一的键
  • 两者的键都需要自己的GetHashCode()方法

.NET中的替代集合:(可用于替代DictionaryHashtable的候选项)

ConcurrentDictionary - 线程安全(可以从多个线程并发安全地访问)
HybridDictionary - 优化性能(适用于少量项目和大量项目)
OrderedDictionary - 可以通过int索引(按项目添加的顺序)访问值
SortedDictionary - 项目自动排序
StringDictionary - 强类型,并针对字符串进行了优化(现已弃用,推荐使用Dictionary<string,string>

相信看完上面这些内容,你对DictionaryHashtable有了一个大概加亿点点全面的了解。所以最后我们再来做个简单的总结:

在实际开发中,由于Dictionary<TKey, TValue>提供了类型安全、更好的性能和泛型支持,它通常比Hashtable更受欢迎。然而,如果你正在处理遗留代码或特殊用例,Hashtable可能仍然是一个可行的选择。在大多数情况下,推荐使用Dictionary

既然你已经带走了这么多的知识,不妨为俺这个小博主留下个小赞再离开吧~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值