Jon*_*Jon 269 .net c# collections dictionary hashtable
我想弄清楚何时以及为什么要使用Dictionary或HashTable.我在这里做了一些搜索,发现有人在谈论字典的一般优点,我完全赞同,这导致拳击和拆箱优势,以获得轻微的性能提升.
但是我也读过字典并不总是按照它们插入的顺序返回对象,它被排序的东西.作为HashTable的地方.据我了解,这导致HashTable在某些情况下更快.
我的问题是,这些情况可能是什么?我上面的假设我错了吗?你可以用什么情况来选择一个在另一个之上,(是的,最后一个有点含糊不清).
Meh*_*ari 291
System.Collections.Generic.Dictionary<TKey, TValue>和System.Collections.Hashtable类都在内部维护哈希表数据结构.它们都不能保证保留物品的顺序.
抛开拳击/拆箱问题,大多数时候,他们应该有非常相似的表现.
它们之间的主要结构差异是Dictionary依赖链接(维护每个哈希表桶的项列表)来解决冲突,而Hashtable使用rehashing进行冲突解决(发生冲突时,尝试使用另一个哈希函数将密钥映射到桶) .
Hashtable如果您的目标是.NET Framework 2.0+,那么使用类几乎没有什么好处.它实际上已经过时了Dictionary<TKey, TValue>.
Abd*_*nim 106
我想这对你来说没什么意义.但仅供参考人员停留
性能测试 - SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable
use*_*704 28
字典:
哈希表:
小智 15
MSDN文章:"
Dictionary<TKey, TValue>该类具有与类相同的功能Hashtable.Dictionary<TKey, TValue>特定类型(除了Object)之外的A具有比Hashtable用于值类型更好的性能 ,因为元素Hashtable是类型的Object,因此,装箱和取消装箱通常在存储时发生或检索值类型".
链接:http://msdn.microsoft.com/en-us/library/4yh14awz(v = vs.90).aspx
Ada*_*ter 11
两者实际上是同一个类(你可以看一下反汇编).HashTable是在.Net拥有泛型之前创建的.然而,词典是一个通用类,为您提供强大的输入优势.我永远不会使用HashTable,因为Dictionary会让你无需使用.
另一个重要的区别Hashtable是线程安全.Hashtable内置多个读卡器/单个写入器(MR/SW)线程安全,这意味着Hashtable允许一个编写器与多个读卡器一起无需锁定.在的情况下,Dictionary没有线程安全的,如果你需要线程安全的,您必须实现自己的同步.
进一步阐述:
Hashtable,通过Synchronized属性提供一些线程安全性,该属性返回集合周围的线程安全包装器.包装器通过在每次添加或删除操作时锁定整个集合来工作.因此,尝试访问集合的每个线程必须等待轮到一个锁.这不可扩展,可能会导致大型集合的性能显着下降.此外,该设计并未完全免受竞争条件的影响..NET Framework 2.0中的集合类一样
List<T>,Dictionary<TKey, TValue>等不提供任何线程同步; 用户代码必须在多个线程上同时添加或删除项目时提供所有同步如果您需要类型安全性以及线程安全性,请在.NET Framework中使用并发集合类.进一步阅读这里.
| 归档时间: |
|
| 查看次数: |
183717 次 |
| 最近记录: |