大厂面试题——HhashMap底层源码,数据结构
JDK1.8之前Put方法 :
七上: 后添加的元素 会添加到旧元素的前面 旧元素 变为 新元素的子节点
1.创建完对象
HashMap h = new HashMap();
饿汉式不管需不需要都要开辟空间
//开辟了一个长度为16的 Entry类型的数组
//定义了阈值 12
2.添加数据
2.1key==null
将数据添加到下标为0的位置
2.2key!=null
2.2.1 第一次添加 直接填入
2.2.2 指定位置再次添加 hash 一样 key 不一样
2.2.3 指定位置再次添加 hash 一样 key 一样
新的value 会替换旧的vaue 并 将 旧的value返回
扩容:
1.size>= 阈值 && 即将插入数据的桶 不为bull 进行扩容
扩容到原来的2倍
JDK1.8之后Put方法 :
八下: 后添加的元素 会添加到旧元素的后面
1.创建完对象
HashMap h = new HashMap();
懒汉式不开辟空间,只有需要调用时才会开辟空间
只是给加载因子完成赋值
2.添加数据
2.0 添加数据时才会开底层数组开辟空间
//开辟了一个长度为16的 Node类型的数组
//定义了阈值 12
2.1key==null
将数据添加到下标为0的位置
2.2key!=null
2.2.1 第一次添加 直接填入
2.2.2 指定位置再次添加 hash 一样 key 不一样
2.2.3 指定位置再次添加 hash 一样 key 一样
新的value 会替换旧的vaue 并 将 旧的value返回
扩容:
1.size>= 阈值 && 即将插入数据的桶 不为bull 进行扩容
扩容到原来的2倍
2. 某一个位置节点的数量>=8 && 顺序表的长度>=64 将此节点下的node 进行树化