千家信息网

java中HashMap当插入位置不为空的时候JDK是怎么处理

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下java中HashMap当插入位置不为空的时候JDK是怎么处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下
千家信息网最后更新 2026年11月02日java中HashMap当插入位置不为空的时候JDK是怎么处理

小编给大家分享一下java中HashMap当插入位置不为空的时候JDK是怎么处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

首先是源码:

可以看到当插入的位置不为空时会有三种情况:

1、首先会判断p(当前要插入位置的元素)的hash值是否与待插入数据的hash值一致,如果一致再判断key是否一致,如果都一致那么将p赋值给e,然后结束该判断

2、如果条件一不成立判断p是否是TreeNode(实际TreeNode就是红黑树的简单实现,红黑树会在将TreeMap时讲解),如果是那么直接将待插入的值插入该节点。

3、如果以上两种情况都不符合,那么进入第三种(此时p节点是一个链表,是链式存储的)。首先是定义了一个for循环,可以看到该for循环没有显式指定自动退出条件,也就是说该for循环是手动退出的。

首先我们看for循环的循环体

(1)首先是判断p是否还有下一个,如果没有那么将要插入的信息构建为一个节点然后判断binCount是否大于等于TREEIFY_THRESHOLD - 1(TREEIFY_THRESHOLD为HashMap中定义的一个常量,值为8),如果大于这个值的话就调用treeifyBin,该操作是构建一个红黑树,后续讲TreeMap时会讲到,此处不做过多解释。至于为什么这么做?是因为当数据少的时候用链表遍历还是比较快的,但是当数据多的时候用链表就会比较慢了,而为了避免因此拖慢HashMap的效率,当数据多的时候此处会自动用红黑树代替(可以从一定程度上避免hash碰撞攻击),而JDK开发人员认为当数据大于等于8个时就比较多了,需要用红黑树代替链表了。进行完上述操作后for循环中断。

(2)如果p还有下一个,那么进入另外一个判断,判断下一个节点的key和hash值是否与待插入的key和hash值相同,如果相同那么就直接跳出循环。

(3)如果上述两种情况都没命中,那么就将下个节点的引用赋值给当前循环的这个节点p,然后继续循环,直到循环退出。

以上三种情况都判断完毕后,判断此时的e是否等于null,如果不等于null说明经过上述流程后得出一个结论,那就是要放入的key在原来是已经存在的,只需将原来的key对应的value替换为新的value值即可。

以上是"java中HashMap当插入位置不为空的时候JDK是怎么处理"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

循环 节点 时候 数据 位置 一致 情况 篇文章 处理 相同 内容 就是 条件 不怎么 也就是 也就是说 人员 信息 元素 只需 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 美国互联网保险保险科技 中国互联网科技股 九亚互联网科技 广州互联网络科技有限公司 天津摩尔互联网科技 睿民互联网科技 菲比寻常互联网科技 互联网科技小额贷款 伴你行互联网科技有限公司 火传媒上海互联网科技 互联网巨头投资的硬核科技 互联网之后的科技是什么 湖南诚度互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 四川慕妮娅互联网科技有限公司 用友工业互联网科技发展 美国互联网科技实力 每天都有哪些好的互联网科技 西安有哪些互联网高科技企业 江苏根荣互联网科技 上海万想互联网科技 互联网前沿科技 佰商互联网科技有限公司 互联网公司科技股 移动互联网年度科技创新 深圳艾果互联网通讯科技 银行科技岗属于互联网吗 扫呗互联网科技有限公司 如何强化互联网金融科技
0