更详细的解析可以查看这篇文章:https://blog.csdn.net/zhaoguanghui2012/article/details/88105715

简要描述就是通过桶Buckets与Entries

1.通过key1值获取哈希值h1 2.h1%桶长度得到入桶位置的m1,Buckets[m1] 3.寻找可存放Entry的位置,得到Entries[n1] 4.h1=>Buckets[m1]=>Entries[n1],形成映射关系

当不同key值hashCode相同时,利用单链表解决碰撞,例如

1.经过上面步骤已经有h1=>Buckets[m1]=>Entries[n1]的关系了,假设有key2获取哈希值同样为h1 2.入桶位置同样为m1,Buckets[m1] 3.寻找Entries位置,得到Entirs[n2] 4.此时即将形成Buckets[m1]=>Entries[n2]的关系,会取代原有关系,此时链表就起作用了 5.链表Entires[n2].next=Buckets[m1],即新元素的下一个指向旧元素 6.Buckets[m1]=Entires[n2],新元素取代以前旧元素的位置 7.5、6步骤就是说,新加入的元素存于链表的第一位,它的next就是上一个元素 8.此时整个映射关系应当是h1=>Buckets[m1]=>Entries[n2] 9.而且还有链表关系Entries[n2].next=>Entries[n1]

那么Dictionary执行查找逻辑顺序就很明显了

1.给定一个key3,获取hash值h3,假定h3与h1相等 2.那么通过关系h1=>Buckets[m1]=>Entires[n2],首先找到了元素n2 3.比较元素n2的key值是否与key3相等,相等就返回n2,不相等则查找链表下一个元素 4.Entries[n2].next=>Entires[n1]找到了n1,继续判定key值是否相等,不相等则继续查找下一个

删除动作

1.通过查找逻辑查找到Entries[x] 2.将其链表上一个元素的next赋值为本元素的.next 3.将其赋值为空,并记录当前Entries的空位置索引freeList=x,将其freeCount++

C#中Dictionary的实现简述的更多相关文章

  1. C#中Dictionary<TKey,TValue>排序方式

    自定义类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  2. .NET中Dictionary<TKey, TValue>浅析

    .NET中Dictionary<TKey, Tvalue>是非常常用的key-value的数据结构,也就是其实就是传说中的哈希表..NET中还有一个叫做Hashtable的类型,两个类型都 ...

  3. C#中Dictionary小记

    使用C#中Dictionary的一下细节小记: 一.Dictionary.Add(key,value) 与 Dictionary[key]=value的区别: 如果Dictionary中已经有了key ...

  4. C#中Dictionary的用法

    在C#中,Dictionary提供快速的基于兼职的元素查找.他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它.它包含在System. ...

  5. ASP.NET中Dictionary基本用法实例分析

    本文实例讲述了ASP.NET中Dictionary基本用法.分享给大家供大家参考,具体如下: //Dictionary位于System.Collections.Generic命名空间之下 /*  * ...

  6. C#中Dictionary排序方式

    转载自:https://www.cnblogs.com/5696-an/p/5625142.html 自定义类: https://files.cnblogs.com/files/xunhanliu/d ...

  7. Windows Presentation Foundation (WPF)中的命令(Commands)简述

    原文:Windows Presentation Foundation (WPF)中的命令(Commands)简述 ------------------------------------------- ...

  8. C#中Dictionary,Hashtable,List的比较及分析

    一. Dictionary与Hashtable Dictionary与Hashtable都是.Net Framework中的字典类,能够根据键快速查找值 二者的特性大体上是相同的,有时可以把Dicti ...

  9. C#中Dictionary的用法及用途

    Dictionary<string, string>是一个泛型 他本身有集合的功能有时候可以把它看成数组 他的结构是这样的:Dictionary<[key], [value]> ...

随机推荐

  1. STM32 & RT-Thread的逆向入门

    STM32 & RT-Thread的逆向入门 backahasten@0xFA ​                现在,各种MCU的价格越来越低,同等条件下能买到的ROM和RAM资源也多了.对 ...

  2. Nginx配置HTTPS并将HTTP请求重定向到HTTPS

    个人博客 地址:https://www.wenhaofan.com/a/20190702214652 在阿里云获取免费的HTTPS证书 配置HTTPS之前首先需要拥有HTTPS证书,在阿里云可以获得域 ...

  3. Python语法速查: 14. 测试与调优

    返回目录 本篇索引 (1)测试的基本概念 (2)doctest模块 (3)unittest模块 (4)调试器和pdb模块 (5)程序探查 (6)调优与优化 (1)测试的基本概念 对程序的各个部分建立测 ...

  4. 【spring boot】SpringBoot初学(2.2)– SpEL表达式读取properties属性到Java对象

    前言 github: https://github.com/vergilyn/SpringBootDemo 代码位置:(注意测试方法在,test下的SpelValueApplicationTest.c ...

  5. JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题

    javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbi ...

  6. 图像读取函数cv::imread()的几种使用方式

    string imgpath = "C:\Users\Y\Pictures\miao.jpg"; OpenCV的imread()函数不支持单右斜线形式的路径,即不支持上述形式的路径 ...

  7. MVC5+EF6 入门完整教程八:数据迁移

    https://www.cnblogs.com/miro/p/4164076.html

  8. element-ui 1.4.13

    Form 表单 rules 表单校验函数需要访问实例中的属性时应该把校验规则写为computed,校验函数写入methods <el-form-item prop="taxableIn ...

  9. 0级搭建类011-Oracle Linux 7.x安装(OEL 7.7) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  10. java读取解析application.yml

    java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...