请说明 C# 中 Hashtable 与 Dictionary 这两类集合在类型安全、性能以及使用场景上的主要不同点。
考察说明
考查对 C# 中非泛型与泛型集合差异的理解,包括类型安全与性能特性。
回答思路
- 【回答框架 1】Hashtable 是非泛型集合,键和值都存储为 object 类型,因此使用时需要显式类型转换,存在装箱拆箱开销,且类型错误在运行时才暴露。
- 【回答框架 2】Dictionary<TKey,TValue> 是泛型集合,键和值的类型在编译时就确定,避免了转换和装箱,访问速度更快,类型安全由编译器保证。
- 【回答框架 3】在性能上,Dictionary 通常优于 Hashtable,尤其是大量值类型数据时;Hashtable 由于装箱和类型转换,性能较低。
- 【回答框架 4】Hashtable 是线程安全的,支持多线程并发读写;Dictionary 默认非线程安全,多线程场景需自行加锁,但可选用 ConcurrentDictionary。
- 【回答框架 5】选择依据:新代码优先使用 Dictionary;仅在需要线程安全且无更高性能要求时考虑 Hashtable。避免使用 Hashtable,因其在类型安全和性能上均劣于泛型字典。
- 【关键点 1】Hashtable 非泛型,存在装箱和类型转换开销;Dictionary 泛型,类型安全且更快
- 【关键点 2】Dictionary 默认不保证线程安全,Hashtable 支持并发,但泛型字典可用 ConcurrentDictionary 替代
- 【关键点 3】优先使用 Dictionary,Hashtable 仅用于遗留代码兼容
- 【易错点 1】混淆线程安全语义:Dictionary 并非线程安全,多线程需外部同步
- 【易错点 2】低估装箱开销:大量数据场景下效率差异明显