c# - .NET HashTable 与 Dictionary - Dictionary 能一样快吗?

标签 c# .net collections dictionary hashtable

我正在尝试找出何时以及为何使用字典或哈希表。我在这里做了一些搜索,发现人们在谈论我完全同意的字典的通用优势,这导致了装箱和拆箱的优势,从而获得了轻微的性能提升。

但是我也读过字典不会总是按照插入的顺序返回对象,它是排序的。哈希表将在哪里。据我了解,这会导致 HashTable 在某些情况下更快。

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

最佳答案

System.Collections.Generic.Dictionary<TKey, TValue>System.Collections.Hashtable类都在内部维护一个哈希表数据结构。 它们都不保证保留项目的顺序。

撇开装箱/拆箱问题不谈,大多数时候,它们的性能应该非常相似。

它们之间的主要结构差异是 Dictionary依靠链接(为每个哈希表桶维护一个项目列表)来解决冲突,而 Hashtable使用重新散列解决冲突(发生冲突时,尝试另一个散列函数将 key 映射到存储桶)。

使用 Hashtable 几乎没有什么好处如果您的目标是 .NET Framework 2.0+,则为类。它实际上已被 Dictionary<TKey, TValue> 废弃.

关于c# - .NET HashTable 与 Dictionary - Dictionary 能一样快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089132/

相关文章:

c# - 如何找到包含等待/异步代码的间歇性失败单元测试的原因?

arrays - 将IEnumerable <T>转换为T []的最佳方法

java - 在 Java 中打印列表中的重复项

c# - 尝试在没有 Entity Framework 的情况下使用表单发布——我放弃了,但会保持打开状态,以防它帮助某人......在某个地方

c# - 获取 null 作为整数类型的默认值

c# - 通用类/方法的单元测试方法

c# - 如何允许来自 c# Textbox 的 SQL 中带有空格的文本

.net - 如何将 C++ 异常重新抛出为 .net 异常并保留消息、堆栈跟踪和原始异常?

c# - 如何解决 KeyNotFoundException

java - 我们如何使用可变引用来保持类的不可变性