hashMap

// 参数onlyIfAbsent表示是否替换原值 // 参数evict我们可以忽略它,它主要用来区别通过put添加还是创建时初始化数据的
(每一次扩容为 原来的两倍)1.如第四章图
首先判断是否为空 或长度为零 在hashMap刚创建的时候 判断是为了 初始化 为 16个 桶

根据hash计算出的值(key的hash值 空的返回0 不空的返回相应的hash值 ) 去找到 存放的位置 如果 key为空直接添加到table中 如果位置存在 去查找key存在的位置 看是否 存在 (存在就覆盖)
否 到 树的节点(或者是确认是否为红黑树) 是红黑树 就插入
不是红黑树 树节点 遍历插入(两个hashcode值相同 key 不同 以链表形式保存)p.next 为链表 插入一个新节点在 相同hashcode值的位置值 以链表的形式 如果 链表的长度大于 8 则会 转为 红黑树 然后 红黑树插入
如果当前haspMap 容量超过 threshold 就扩容

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值