为什么在C#中偏爱使用字典而不是哈希表?
区别
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)
就我个人而言,Dictionary(词典)的概念就是哈希表。
如果你的问题是“为什么我们使用Dictionary
有趣的是,.NET Framework中的Dictionary
泛型Dictionary是从Hashtable的源代码中复制的