在大多数编程语言中,字典比哈希表更受欢迎。这背后的原因是什么?
当前回答
Hashtable对象由包含集合元素的桶组成。bucket是Hashtable中元素的虚拟子组,这使得搜索和检索比大多数集合更容易和更快。
Dictionary类具有与Hashtable类相同的功能。对于值类型,特定类型(而不是Object)的字典比Hashtable具有更好的性能,因为Hashtable的元素属于Object类型,因此,如果存储或检索值类型,通常会进行装箱和取消装箱。
进一步阅读:哈希表和字典集合类型
其他回答
Dictionary<>是泛型类型,因此它是类型安全的。
您可以在HashTable中插入任何值类型,这有时可能会引发异常。但是Dictionary<int>只接受整数值,类似地Dictionary><string>只接受字符串。
因此,最好使用Dictionary<>而不是HashTable。
Hashtable对象由包含集合元素的桶组成。bucket是Hashtable中元素的虚拟子组,这使得搜索和检索比大多数集合更容易和更快。
Dictionary类具有与Hashtable类相同的功能。对于值类型,特定类型(而不是Object)的字典比Hashtable具有更好的性能,因为Hashtable的元素属于Object类型,因此,如果存储或检索值类型,通常会进行装箱和取消装箱。
进一步阅读:哈希表和字典集合类型
哈希表:
键/值将在存储到堆中时转换为对象(装箱)类型。
从堆中读取时,需要将键/值转换为所需的类型。
这些操作成本很高。我们需要尽可能避免装箱/拆箱。
字典:HashTable的泛型变体。
禁止装箱/拆箱。无需转换。
从概念上讲,字典是一个哈希表。
如果你的意思是“为什么我们使用Dictionary<TKey,TValue>类而不是Hashtable类?”,那么答案很简单:Dictionary>TKey,TValue>是泛型类型,Hashtable不是。这意味着你可以通过Dictionary<TKey,TValue>获得类型安全性,因为你不能在其中插入任何随机对象,也不必强制转换你取出的值。
有趣的是,.NET Framework中的Dictionary<TKey,TValue>实现是基于Hashtable的,您可以从其源代码中的注释中看出:
通用字典已从Hashtable的源复制
来源
仅供参考:在.NET中,Hashtable是线程安全的,可供多个读线程和一个写线程使用,而在Dictionary中,公共静态成员是线程安全,但不能保证任何实例成员都是线程安全。
因此,我们不得不将所有词典改回Hashtable。
推荐文章
- 如何从枚举中选择一个随机值?
- 驻留在App_Code中的类不可访问
- 在链式LINQ扩展方法调用中等价于'let'关键字的代码
- dynamic (c# 4)和var之间的区别是什么?
- Visual Studio: ContextSwitchDeadlock
- 返回文件在ASP。Net Core Web API
- 自定义HttpClient请求头
- 如果我使用OWIN Startup.cs类并将所有配置移动到那里,我是否需要一个Global.asax.cs文件?
- VS2013外部构建错误"error MSB4019: The imported project <path> was not found"
- 从另一个列表id中排序一个列表
- 等待一个无效的异步方法
- 无法加载文件或程序集…参数不正确
- c#中枚举中的方法
- 如何从字符串中删除新的行字符?
- 如何设置一个默认值与Html.TextBoxFor?