我试图弄清楚什么时候以及为什么要使用字典或哈希表。我在这里做了一些搜索,发现人们在谈论Dictionary的一般优势,我完全同意这一点,它带来了装箱和拆箱的优势,从而获得了轻微的性能增益。

但我也读过字典不会总是按照插入的顺序返回对象,事情是有序的。就像哈希表一样。据我所知,这导致哈希表在某些情况下要快得多。

我的问题是,这些情况可能是什么?我上面的假设是错的吗?你会在什么情况下选择一个而不是另一个,(是的,最后一个有点模棱两可)。


当前回答

字典具有泛型类型的优点,这使得它的类型安全,而且由于不需要装箱,因此速度更快。下面的对比表(使用在类似的SO问题帖子中找到的答案构造的)说明了支持字典而不是哈希表的其他一些原因(反之亦然)。

其他回答

另一个重要的区别是Hashtable类型同时支持无锁的多个读取器和单个写入器,而Dictionary则不支持。

如果你关心读取,它总是按照插入到Dictionary中的顺序返回对象,你可以看看

OrderedDictionary—值可以通过整数索引访问(按添加项的顺序) SortedDictionary -项目自动排序

System.Collections.Generic。Dictionary<TKey, TValue>和System.Collections.Hashtable类都在内部维护哈希表数据结构。没有一个能保证保持物品的顺序。

撇开装箱/开箱问题不谈,大多数情况下,它们应该具有非常相似的性能。

它们之间主要的结构区别在于Dictionary依赖于链接(为每个哈希表桶维护一个项目列表)来解决冲突,而Hashtable使用重哈希来解决冲突(当发生冲突时,尝试另一个哈希函数来将键映射到一个桶)。

如果你的目标是。net Framework 2.0+,使用哈希表类没有什么好处。它被Dictionary<TKey, TValue>有效地废弃了。

字典具有泛型类型的优点,这使得它的类型安全,而且由于不需要装箱,因此速度更快。下面的对比表(使用在类似的SO问题帖子中找到的答案构造的)说明了支持字典而不是哈希表的其他一些原因(反之亦然)。

我猜这对你来说已经毫无意义了。只是为了供路过的人参考

性能测试——SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable

内存分配:

插入所用时间:

项目搜索时间: