关于c#:. NET HashTable Vs Dictionary – 字典能否同样快?

.NET HashTable Vs Dictionary - Can the Dictionary be as fast?

我试图弄清楚什么时候和为什么要使用字典或哈希表。我在这里做了一些搜索,发现人们谈论字典的一般优势,我完全同意,这将导致拳击和拆箱优势,获得轻微的性能提升。

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

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


两个级别都有一个表数据结构国际。他们没有保护项目的秩序。

离开拳击/不拳击问题aside,大部分时间,他们的表现应该非常相似。

它们之间的基本结构差异在于:Dictionary连接到链接(保持一份列有每一个有桌子的项目的清单)以解决在Hashtable时的碰撞问题,使用Rehashing来解决碰撞问题(当碰撞发生时,选择另一个具有将键映射到一个包的功能)。

如果你的目标是净框架2.0+,那么使用EDOCX1的好处就很小。事实上,它已经过时了。


我想这对你来说不算什么但只是为了让人们停止

Performance test-sortedlist vs.Voreddictionary vs.Dictionary vs.Hashtable


哈什特布尔与字典的区别

字典:

  • 如果我们试图找到不存在的钥匙,字典返回错误。
  • 字典快捷,比一个硬汉快,因为那里没有拳击和拳击。
  • 词典是一种通用的类型,我们可以使用它的任何数据类型。

Hashtable:

  • 如果我们试图找到不存在的钥匙
  • 比字典慢,因为它需要拳击和拳击。
  • Hashtable is not a generic type,

另一个重要的区别是,在同一时间,黑客类型的介质锁定多个阅读器和一个单一的作者,而字典不存在。


MSDN Article:"The Dictionary class has the same
functionality as the Hashtable class. A Dictionary
of a specific type (other than Object) has better performance than a
Hashtable for value types because the elements of Hashtable are of
type Object and, therefore, boxing and unboxing typically occur if
storing or retrieving a value type".

Link:http://msdn.microsoft.com/en-us/library/4yh14awz(V=vs.90)。


两个都是同一个班(你可以看分组)。Hashtable was created first before.Net had generics.字典,不过是一个普通的类别,给你强大的效益。自从你花钱买字典以来,我就永远不会用。


另一个重要的区别是,安全受到威胁。在多重阅读器/单一作者(MR/SW)中建立了安全的威胁,这意味着Hashtable允许一个作者与多重阅读器在一起而不锁定。如果你需要安全,那就没有安全的威胁,你必须实现自己的同步。

To elaborate further:

BLCK1/


词典的优势在于它是一种通用类型,使它安全,并由于缺少拳击需要而加速。The following comparison table(constructed using the answers found in a similar so question post)inclusates some of the other reasons that support dictionaries over hash tables(or反之亦然)。


如果你在乎的是,总是把对象按顺序归还,它们被插入字典中,你可能会有一个眼神

可通过一个INTEGER索引(以添加项目的顺序排列)查询有序值各种项目是自动的


词典的速度快于黑暗,因为词典是一种通用的强大类型。可存储的是缓慢的,因为它以对象为数据类型,指导拳击和不拳击。