为什么Dictionary比Hashtable更受欢迎?

在大多数编程语言中,字典比hashtables更受欢迎。 这背后的原因是什么?


对于它的价值,一个字典概念)的哈希表。

如果你的意思是“为什么我们使用Dictionary<TKey, TValue>类而不是Hashtable类?”,那么这是一个简单的答案: Dictionary<TKey, TValue>是一个泛型类型,而Hashtable则不是。 这意味着你使用Dictionary<TKey, TValue>获得类型安全性,因为你不能插入任何随机对象,并且你不需要转换你取出的值。

有趣的是,.NET Framework中的Dictionary<TKey, TValue>实现基于Hashtable ,正如你可以从源代码中的这条评论中看出的那样:

通用词典是从Hashtable的源文件中复制而来的

资源


Dictionary <<< >>> Hashtable差异:

  • 泛型 <<< >>> 非泛型
  • 需要自己的线程同步 <<< >>>通过Synchronized()方法提供线程安全版本
  • 枚举项: KeyValuePair <<< >>>枚举项: DictionaryEntry
  • 较新(> .NET 2.0 )<<< >>>较老(自.NET 1.0起
  • System.Collections.Generic <<< >>>在System.Collections中
  • 请求不存在的键抛出异常 <<< >>>请求不存在的键返回null
  • 对于值类型 <<< >>> 位较慢 (需要装箱/取消装箱)可能会 一点
  • Dictionary / Hashtable相似之处:

  • 两者都是内部哈希表 ==根据关键字快速访问多项目数据
  • 两者都需要不可变的唯一键
  • 两者的键都需要自己的GetHashCode()方法
  • 类似的 .NET集合(用来代替Dictionary和Hashtable的候选):

  • ConcurrentDictionary - 线程安全 (可以同时从多个线程安全地访问)
  • HybridDictionary - 优化性能 (对于少数项目以及对许多项目)
  • OrderedDictionary - 可以通过int索引访问值(按照添加项目的顺序)
  • SortedDictionary - 自动排序的项目
  • StringDictionary - 为字符串强类型化和优化

  • 因为Dictionary是一个泛型类( Dictionary<TKey, TValue> ),所以访问它的内容是类型安全的(也就是说,你不需要使用ObjectObject ,就像使用Hashtable )。

    比较

    var customers = new Dictionary<string, Customer>();
    ...
    Customer customer = customers["Ali G"];
    

    var customers = new Hashtable();
    ...
    Customer customer = customers["Ali G"] as Customer;
    

    然而, Dictionary是作为Hashtable内部实现的,所以在技术上它的工作原理是一样的。

    链接地址: http://www.djcxy.com/p/5147.html

    上一篇: Why is Dictionary preferred over Hashtable?

    下一篇: break vs. continue