HashMap源码分析
创始人
2025-06-01 02:19:53

Java源码系列:下方连接
http://t.csdn.cn/Nwzed


文章目录

  • 前言
  • 一、Map接口的特点
  • 二、Map的四大遍历方式
    • 1
    • 2
    • 3
    • 4
  • HashMap源码解读
    • 1.添加元素到 HashMap
    • 2.添加重复的 key到HashMap
  • 总结


前言

提示:三个工作日之后总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、Map接口的特点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
我们都知道,map是的数据结构是数组加链表加红黑树,但是存放的元素过多就会很难进行管理,还是那句话我们能想到的,Java的设计者的哪些大佬也都想到了,因此map提供的一个entrySet集合内部类映射了map的 每个k,v元素,提供了keySet获取所有的key和values获取所有的value,来帮助我们进行遍历。可以把entrySet看做一个“指针”,entrySet的每个Entry只是指向了map存储的Node节点的内存地址一一映射,并不是将map的每个节点都再次拿来进行封装。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

二、Map的四大遍历方式

1

在这里插入图片描述

2

在这里插入图片描述

3

在这里插入图片描述
在这里插入图片描述

4

在这里插入图片描述

HashMap源码解读

1.添加元素到 HashMap

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
不多废话 debug 启动
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
经过一系列的 hash算法得出hash值,拿着这些参数来到 putVal 方法。第一次肯定会去 resize进行数组扩容。

在这里插入图片描述
计算数组下标落点,所有都为 null 肯定成立,进入 newNode 方法。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
afterNodeInsertion( ) 仍然经典空方法
在这里插入图片描述
put方法说错了
上面说错了是put 方法,我迷在HashSet和LinkedHashSet了。一路返回到 put 方法 将null返回出去,返回的是被替换的元素,如果为空也就证明添加成功了,如果key相同添加元素,会将原来的value进行覆盖,并返回被替换的元素值,所以返回 null 也正好证明了添加成功

2.添加重复的 key到HashMap

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
判断hash值是否一样,我们传入的key一样hash值肯定也一样,然后判断内存地址由于是字符串肯定在常量池中,内存地址一样,所以条件成立,进入if 语句,将 p 赋值给 e
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
然后一路返回到 put 方法,只要返回的不是null就是替换成功,将被替换的元素进行返回


总结

提示:这里对文章进行总结:三个工作日之后总结,放入前言部分

相关内容

热门资讯

揭秘内幕“快友互动真的能开挂吗... 【无需打开直接搜索微信;3696223】 操作使用教程:1.亲,实际上快友互动是可以开挂的,确实有挂...
房卡秒懂“牛牛房卡微信链接房卡... 牛牛房卡微信链接是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购买房...
分享技术“空谷幽兰可以安装挂吗... 亲,空谷幽兰这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总...
一分钟了解“微信群里用链接玩金... 微信群里用链接玩金花是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购...
重大通报“问鼎娱乐究竟有没有挂... 重大通报“问鼎娱乐究竟有没有挂”!确实是能开挂-知乎是一款可以让一直输的玩家,快速成为一个“必胜”的...