Hastable & Dictionary

摘自:地址

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是Hastable的泛型实现

foreach(string key in myDictionary.Keys)
{
    foreach(string val in myDictionary[key])
    {
          Console.WirteLine("Key : " + key + "/nValue : " + val);
    }
}

因为Dictionary是KeyValue的集合,所以Dictionary中的元素类型并非是Key类型或Value类型。
相反,元素类型是键类型和值类型的键值对。

你可能感兴趣的:(Hastable & Dictionary)