为什么在C#中偏爱使用字典而不是哈希表?

46 浏览
0 Comments

为什么在C#中偏爱使用字典而不是哈希表?

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

区别

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

相似之处:

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

替代.NET集合:

(可以使用而不是Dictionary和Hashtable的候选项)

  • ConcurrentDictionary - 线程安全(可以从多个线程同时安全地访问)
  • HybridDictionary - 优化性能(针对少量项和大量项)
  • OrderedDictionary - 可以通过索引(按添加项目的顺序)访问值
  • SortedDictionary - 项目自动排序
  • StringDictionary - 强类型且针对字符串优化(现已弃用,支持Dictionary
0
0 Comments

就我个人而言,Dictionary(词典)的概念就是哈希表。

如果你的问题是“为什么我们使用Dictionary类而不是Hashtable类?”,那么答案很简单:Dictionary是一种泛型类型,而Hashtable不是。也就是说,你可以使用Dictionary获得类型安全,因为你不能将任意随机对象插入其中,也不必对取出的值进行转换。

有趣的是,.NET Framework中的Dictionary实现基于Hashtable,你可以从其源代码中的此注释看出:

泛型Dictionary是从Hashtable的源代码中复制的

源代码

0