Dictionary
和Hashtable
区别:
Dictionary |
Hashtable |
支持范型 | 不支持 |
需要自己做线程同步 | 通过调用 Synchronized() 方法可以获得线程安全的类型 |
枚举类型是KeyValuePair | 枚举类型是DictionaryEntry
|
.Net 2.0开始有 | .Net 1.0开始有 |
System.Collections.Generic命名空间下 | System.Collections命名空间下 |
获取同一个不存在的key时抛出异常 | 获取同一个不存在的key时返回NULL |
值类型不需要装箱/拆箱,可能会更快些 | 值类型value types需要装箱/拆箱boxing/unboxing |
相同点:
内部都是hashtable实现,通过key访问数据比较快
都需要不可变的,唯一的key
key都需要有自己的GetHashCode()
方法
其他类似的.Net 集合(用于替代Dictionary和
备选项)Hashtable的
ConcurrentDictionary
- 用于多并发、线程安全的字典
HybridDictionary - System.Collections.Specialized命名空间下,优化了性能(在集合较小时,使用 ListDictionary 来实现 IDictionary,然后当集合变大时,切换到Hashtable。)
OrderedDictionary - System.Collections.Specialized命名空间下,值可以通过数字索引访问,因为元素添加的时候已经被指定位置了。public void Insert(int index, object key, object value);
SortedDictionary - 元素插入时自动的被排序
StringDictionary - System.Collections.Specialized命名空间下,将键和值强类型化为字符串而不是对象,对做相应的优化。