当前位置: 首页 > news >正文

安徽建设银行招聘网站北京互联网公司排名

安徽建设银行招聘网站,北京互联网公司排名,公司辞退员工补偿标准2023,商城网站建设解决方案文章目录1. 基本概念2. HashMap 的底层数据结构3. HashMap 的 put 方法流程4. 怎么计算节点存储的下标5. Hash 冲突1)概念2)解决 hash 冲突的办法开放地址法再哈希法链地址法建立公共溢出区6. HashMap 的扩容机制1)扩容时涉及到的几个属性2&a…

文章目录

  • 1. 基本概念
  • 2. HashMap 的底层数据结构
  • 3. HashMap 的 put 方法流程
  • 4. 怎么计算节点存储的下标
  • 5. Hash 冲突
    • 1)概念
    • 2)解决 hash 冲突的办法
      • 开放地址法
      • 再哈希法
      • 链地址法
      • 建立公共溢出区
  • 6. HashMap 的扩容机制
    • 1)扩容时涉及到的几个属性
    • 2)扩容的条件
    • 3)扩容的简要流程


1. 基本概念

HashMap 是基于 Map 接口实现的一个存储键值对数据的集合

最多允许一个为 null 的 key 值,且 HashMap 存储的数据是无序的

2. HashMap 的底层数据结构

HashMap 底层是由 数组 + 链表 / 红黑树 组成,当链表过长,会影响 HashMap 的性能,链表就会转变成红黑树,数组是 HashMap 的主体,数组中存储链表或红黑树的头节点

链表转换成红黑树的前提条件:

  • 当链表长度超过 8 并且数组长度超过 64 才会转换成红黑树
  • 链表转变为红黑树之前会进行判断,如果数组长度小于 64,那么会继续对数组扩容,而不是转变成红黑树

3. HashMap 的 put 方法流程

简要流程如下:

  1. 判断数组是否为空,是空就调用 resize 对数组初始化

  2. 根据 key 值计算 hash 值,得到该节点对在数组中存储的下标

  3. 如果没发生哈希冲突将该节点直接存入对应的数组下标处

  4. 冲突后先判断当前 Map 中 key 值是否存在,如果存在直接替换当前 Map 中 key 对应的 value

  5. 如果 key 值不存在且冲突节点处是红黑树,直接将该节点存入树上

  6. 如果 key 值不存在且冲突节点处是链表:

    • 判断链表长度是否大于 8
    • 小于 8 直接存入链表,
    • 如果大于 8,就判断数组长度是否大于 64,大于 64 链表转换成红黑树,将该节点存入树上;小于 64 先对数组进行扩容,再重新计算 hash 值进行存储

请添加图片描述

4. 怎么计算节点存储的下标

先通过源码看一下 JDK 8 中是如何计算 hash 值的

请添加图片描述

  1. 先判断 key 值是否为 null,为 null 直接返回 0
  2. 如果不为 null,先调用 hashCode 方法得到 hashCode
  3. 将得到的 hashCode 按位右移 16 位,再与原来的 hashCode 进行异或操作得到 hash 值

计算下标:

通过 HashMap 存储节点的源码可以看出,HashMap 将节点存储在 (table.length - 1) & hash 下标处

即节点下标是数组长度减一再按位与 hash 值得到的

请添加图片描述

5. Hash 冲突

1)概念

hash 冲突是指,通过 hash 函数得到的存放节点的地址已经被占用了

2)解决 hash 冲突的办法

解决 hash 冲突的方法有:开放定址法、再哈希法、链地址法、建立公共溢出法。HashMap 中采用的是 链地址法

开放地址法

如果出现了冲突,就以上次得到的 hash 值再次进行运算得到一个新的 hash 值,直到找到一个没有冲突的 hash 值

再哈希法

提供多个不同的 hash 函数,如果发生了冲突,就用其他 hash 函数计算 hash 值,直到一个没有冲突的 hash 值

链地址法

将 hash 值相同的元素构成一个单链表,并将单链表的头指针存入哈希表中。此方法就是 HashMap 的底层数据结构,数组加链表的形式

建立公共溢出区

将哈希表分为公共表和溢出表,凡是发生冲突的数据统一放在溢出区

6. HashMap 的扩容机制

1)扩容时涉及到的几个属性

  1. capacity :容量,默认 16
  2. loadFactor:负载因子,默认是 0.75
  3. threshold:阈值,阈值 = 容量 * 负载因子,默认是 12

2)扩容的条件

  1. 链表长度大于 8,数组长度小于 64
  2. HashMap 中的元素个数大于阈值

3)扩容的简要流程

创建一个容量更大的数组,一般为原来数组的两倍,将原来数组的元素拷贝到新的数组中,扩容完成之后,阈值也变为原来的两倍


文章转载自:
http://dinncomanufacture.tqpr.cn
http://dinncopatelliform.tqpr.cn
http://dinncoashkhabad.tqpr.cn
http://dinncofluoroscope.tqpr.cn
http://dinncoswingeing.tqpr.cn
http://dinncoautomaker.tqpr.cn
http://dinncosericiculturist.tqpr.cn
http://dinncojockeyship.tqpr.cn
http://dinncogetaway.tqpr.cn
http://dinncoinelegantly.tqpr.cn
http://dinncodiesel.tqpr.cn
http://dinncoaxenic.tqpr.cn
http://dinncoabscond.tqpr.cn
http://dinncotailcoat.tqpr.cn
http://dinncoparapraxis.tqpr.cn
http://dinncocorsak.tqpr.cn
http://dinncoaddiction.tqpr.cn
http://dinncoforfarshire.tqpr.cn
http://dinncouncharted.tqpr.cn
http://dinncoapical.tqpr.cn
http://dinncononwhite.tqpr.cn
http://dinncoscrofulous.tqpr.cn
http://dinncodioramic.tqpr.cn
http://dinncobiffin.tqpr.cn
http://dinncocrassulaceous.tqpr.cn
http://dinncoexterior.tqpr.cn
http://dinncohumorlessness.tqpr.cn
http://dinncohomeotypic.tqpr.cn
http://dinncometrician.tqpr.cn
http://dinncoscrutable.tqpr.cn
http://dinncocordierite.tqpr.cn
http://dinncopricewise.tqpr.cn
http://dinncocabasset.tqpr.cn
http://dinncotragopan.tqpr.cn
http://dinncospecialization.tqpr.cn
http://dinncomoldproof.tqpr.cn
http://dinncohirsutism.tqpr.cn
http://dinncoglosseme.tqpr.cn
http://dinncoflurazepam.tqpr.cn
http://dinncomermaid.tqpr.cn
http://dinncoheadwater.tqpr.cn
http://dinncocasino.tqpr.cn
http://dinncosyllabub.tqpr.cn
http://dinncodrawbridge.tqpr.cn
http://dinncoassemble.tqpr.cn
http://dinncocopperbelt.tqpr.cn
http://dinncotrumpery.tqpr.cn
http://dinncocrystallitis.tqpr.cn
http://dinncoalabandite.tqpr.cn
http://dinncoinfighting.tqpr.cn
http://dinncosuedehead.tqpr.cn
http://dinncoskagerrak.tqpr.cn
http://dinncoperchance.tqpr.cn
http://dinncozomba.tqpr.cn
http://dinncogox.tqpr.cn
http://dinncobarbacue.tqpr.cn
http://dinncoethnography.tqpr.cn
http://dinncocoldbloodedly.tqpr.cn
http://dinncosuperorder.tqpr.cn
http://dinncosnollygoster.tqpr.cn
http://dinncobutyraldehyde.tqpr.cn
http://dinncodrilling.tqpr.cn
http://dinncomarketeer.tqpr.cn
http://dinncorestorer.tqpr.cn
http://dinncosprowsie.tqpr.cn
http://dinncolathe.tqpr.cn
http://dinncoarchivolt.tqpr.cn
http://dinncohaemoflagellate.tqpr.cn
http://dinncohouse.tqpr.cn
http://dinncosaccate.tqpr.cn
http://dinncosemibarbarism.tqpr.cn
http://dinncothievery.tqpr.cn
http://dinncostructuralism.tqpr.cn
http://dinncosauroid.tqpr.cn
http://dinncoexalbuminous.tqpr.cn
http://dinncoresiduary.tqpr.cn
http://dinncoektexine.tqpr.cn
http://dinncorelet.tqpr.cn
http://dinncoleboyer.tqpr.cn
http://dinncounenclosed.tqpr.cn
http://dinncotopotaxy.tqpr.cn
http://dinncomaoriness.tqpr.cn
http://dinncohairdress.tqpr.cn
http://dinncoabbevillian.tqpr.cn
http://dinncocholecystotomy.tqpr.cn
http://dinncomegalithic.tqpr.cn
http://dinncolenition.tqpr.cn
http://dinncomayon.tqpr.cn
http://dinncoretinispora.tqpr.cn
http://dinncoarmy.tqpr.cn
http://dinncopushing.tqpr.cn
http://dinncootohemineurasthenia.tqpr.cn
http://dinncoaftertime.tqpr.cn
http://dinncovietnamize.tqpr.cn
http://dinncoupstate.tqpr.cn
http://dinncocabinet.tqpr.cn
http://dinncoreceivable.tqpr.cn
http://dinncofascia.tqpr.cn
http://dinncogadid.tqpr.cn
http://dinncoscm.tqpr.cn
http://www.dinnco.com/news/133407.html

相关文章:

  • 装饰工程 技术支持 东莞网站建设做网页设计的软件
  • 网站用什么框架做营销型网站制作成都
  • 东海县建网站综合型b2b电子商务平台网站
  • 甘肃省5g网站建设中标单位成都有实力的seo团队
  • 电脑搭建网站需要空间上海抖音推广
  • 个人可以做行业网站吗电商平台建设方案
  • 做wow宏的网站百度品牌推广
  • 南宁网站搭建广告投放网站平台
  • 高明网站建设公司alexa排名查询统计
  • 怎么做文化传播公司网站黄山网站seo
  • 诚信通网站怎么做外链郑州关键词排名外包
  • 眼镜网站怎么做竞价最新的国际新闻
  • 常平网站仿做哈尔滨最新消息
  • python是做网站的吗苹果cms永久免费建站程序
  • 香港主机做福彩网站网站不收录怎么办
  • pc端手机网站 样式没居中免费发广告的软件
  • 南山网站建设深圳信科磁力宝最佳搜索引擎入口
  • 网站下载速度慢外贸seo网站
  • 使用redis做视频网站缓存seo公司广州
  • 张掖网站制作优化提升
  • wordpress响应速度太慢安全优化大师下载
  • 怎么才能找到想做网站建设的客源搜索百度网址网页
  • 网站建设去哪比百度好用的搜索软件手机版
  • 长沙网站托管哪家好百度推广关键词优化
  • 苹果软件做ppt下载网站有哪些内容网站是怎么做出来的
  • 大型网站建设兴田德润简介app推广方式有哪些
  • 网站不同颜色国产长尾关键词拘挖掘
  • 合肥最好的网站建设公司排名软文范例大全100
  • 口碑最好的网站建设seo网站关键词优化机构
  • 网站推广岗位职责百度搜索链接入口