Java后端开发day36--源码解析:HashMap

(以下内容均来自上述课程)

1. HashMap(一)

底层:数组+链表+红黑树

1.1 前提准备

查看源码:选中HashMap--ctrl+B

小细节:快捷键ctrl+f12--跳出目录结构

  • 蓝色圆圈:class 证明是类名
  • 粉色圆圈: method 证明是方法
  • 方法名和类名相同就证明是构造方法
  • 方法名和类名不相同就证明是普通的成员方法
  • 组成:粉色圆圈 +方法名 +括号内形参 +:后返回值+灰色箭头
  • 灰色箭头:⬆️:重写父类或者接口中的方法 + 父类或接口的名称
  • 灰色箭头:➡️:如果方法本身就是灰色就会出现右箭头,表示直接继承箭头后面的方法,会直接跳转到后面的方法
  • 黄色圆圈:field 表示类的属性:成员变量或者常量
  • 绿色圆圈:interface 表示接口
  • 再往下的蓝色圆圈:大类(HashMap)中的内部类

1.2 Node节点--->链表

1.3 TreeNode---->红黑树

1.4 table---->数组

里面装的元素就是Node的对象

数组长度:默认16

加载因子:默认0.75

1.5 构造方法

1.5.1 空参构造-->加载因子0.75

此时底层数组还没有创建,

添加元素时,数组才会被创建。

形参:哈希值,键,值,当前数据是否保留(false是覆盖不保留),不重要

2. HashMap(二)

数组内部的键值对对象分为两种情况:链表或者红黑树

2.1 添加对象

2.1.1 put方法(添加元素)源码

牵连到下述:

2.1.2 哈希值

2.1.3 putVal方法源码

变量:

语句:

变量:

(1) 添加第一个元素的过程:数组位置为null


(2) 添加其他的元素
(2.1) 数组的位置不为null,键不重复,挂在下面形成链表或者红黑树


(2.2)数组的位置不为null,键重复,元素覆盖

444被覆盖为555,只修改了数据

相关推荐
后端AI实验室3 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风5 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme5 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better5 小时前
学会与虚拟机对话---ASM
java
开源之眼7 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori3168 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户908324602739 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
小王和八蛋9 小时前
DecimalFormat 与 BigDecimal
java·后端
beata9 小时前
Java基础-16:Java内置锁的四种状态及其转换机制详解-从无锁到重量级锁的进化与优化指南
java·后端
IT探险家9 小时前
你的第一个 Java 程序就翻车?HelloWorld 的 8 个隐藏陷阱
java