Hastable & Dictionary<k,v>

摘自:地址

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是KeyValue的集合,所以Dictionary中的元素类型并非是Key类型或Value类型。
相反,元素类型是键类型和值类型的键值对。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,532评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,162评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • CAS CAS(Compare-And-Swap)是CPU的原子指令,中文翻译成比较交换,汇编指令为CMPXCHG...
    wangjie2016阅读 903评论 0 2