摘自:地址
1.单线程程序推荐使用Dictionary:
- 泛型优势
- 读取速度快
- 容量利用充分
2.多线程程序推荐使用Hastable:
- 默认允许单线程写入,多线程读取
- 可获得安全线程,安全类型(调用Synchronized方法),Dictionary非线程安全,必须使用lock语句,效率大减
3.Dictionary具有按照 插入顺序排序 的特性(调用Remove方法后顺序被打乱)
使用哈希表保存集合元素时(键/值对),首先会根据键自动计算哈希代码,以确定该元素的保存位置,再将元素的值放入到相应位置所指向的桶中。
在查找时,再次通过键所对应的哈希代码指向的桶中进行搜索,减少查找元素进行比较的次数。
Hastable中的Key/Value均为Object值,由包含键值对的桶组成。存储桶比大多数集合中的搜索和检索更为便捷。
Hastable的优点:
- 索引速度快(以任意类型键值访问其中元素会快于其他集合,特别是当数据量大的情况下,效率差别尤其大)
遍历Hastable的两种方式:
因为Hastable元素都是键值对,所以元素类型既不是键的类型,也不是值的类型,而是DictionaryEntry类型
方法一:
foreach(System.Collections.DictionaryEntry de in ht)
{
//因为Hastable内存储元素的默认类型是Object,所以需要进行类型转换才可以输出
Console.WriteLine(de.Key.ToString());
Console.WriteLine(de.Value.ToString());
}
方法二:
System.Collections.IDictionaryEnumerator enumerator = ht.GetEnumerator();
while(enumerator.MoveNext())
{
Console.WriteLine(enumerator.Key);
Console.WriteLine(enumerator.Value);
}
Dictionary
-
Dictionary<Key,Value>是Hastable的泛型实现
foreach(string key in myDictionary.Keys)
{
foreach(string val in myDictionary[key])
{
Console.WirteLine("Key : " + key + "/nValue : " + val);
}
}
因为Dictionary是Key和Value的集合,所以Dictionary中的元素类型并非是Key类型或Value类型。
相反,元素类型是键类型和值类型的键值对。