(以下内容均来自上述课程)
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,只修改了数据