我在代码中使用Dictionary但我的同事使用Hashtable。 MSDN表示他们在Key Value对& amp; HDNtable和字典的例子在MSDN上是相同的。
然后他们彼此有多么不同&哪个是最好的还是适合不同的场合?
答案 0 :(得分:24)
Hashtable
是一个无类型的关联容器,它使用DictionaryEntry
类通过其键值对返回枚举结果。
Dictionary<K,T>
是C#2.0中引入的Hashtable
的通用替代品。它使用KeyValuePair<K,T>
个通用对象来表示其键值对。
这些天你应该看到Hashtable
的唯一地方是在引入泛型之前必须在.NET 1.1上运行的遗留代码。由于兼容性原因,它一直存在,但您应该尽可能地选择Dictionary<K,T>
。
答案 1 :(得分:17)
KeyValuePair
是存储在Hashtable
(或Dictionary
)中的数据单位。它们并不相同。
键值对包含单个键和单个值。字典或散列表包含许多键与其关联值的映射。
当您想要将两个相关信息作为单个单元存储时, KeyValuePair
非常有用,尤其是当一个信息以识别方式与另一个相关时(例如1234 =&gt;“David Smith”)。它们也是你在迭代字典时得到的东西。在.NET 4.0中,这些实际上仅用于在Dictionary中内部使用 - 引入了Tuple类用于通用目的。
Hashtable
和Dictionary
之间的区别在于Hashtable
不是通用类 - 它的键和值都是Object
类型。 Dictionary
是通用的,在任何新的开发中通常都应该用于Hashtable
。
答案 2 :(得分:5)
字典是一种类型化的哈希表。如果您知道键和值的数据类型,请出于性能原因使用字典(避免强制转换)。
答案 3 :(得分:0)
一个主要区别是Hashtable
是线程安全的,而Dictionary
则不是。
进行对比
Hashtable
是线程安全的,可供多个读取器线程和单个写入线程使用。当只有一个线程执行写(更新)操作时,它对多线程使用是线程安全的,如果编写器被序列化为Hashtable
,则允许无锁读取。为了支持多个编写器,Hashtable
上的所有操作必须通过Synchronized
方法返回的包装器完成,前提是没有线程读取Hashtable对象。
只要未修改集合,
Dictionary(Of TKey, TValue)
可以同时支持多个阅读器。
答案 4 :(得分:0)
KeyValuePair<TKey, TValue>
是Dictionary<TKey, TValue>
使用的类型。迭代字典中的项目时,会得到一系列KeyValuePair
个对象。
以下是一些示例用法:
var dict = new Dictionary<string, int>();
dict.Add("Hello", 1);
foreach (KeyValuePair<string, int> entry in dict)
{
string s = entry.Key;
int i = entry.Value;
// More logic here
}