hashMap 的put流程
2020-03-13 17:51:43 0 举报
hashMap的put流程
作者其他创作
大纲/内容
1.是有同hash(有可能是hash碰撞)
size。
fasle
entry 的数量(为链表和树中的KV的总和)
2.无同hash元素
hashCode
threshold=capacity*loadFactor
注意:1.可能不同的hash值 经过和 [桶] 数量 取模(位运算)后都是对应同一个位置的!2.key对应的hash值如果是同一样的,他们分布的桶位置其实也是可以是一样
直接替换掉原来的那个
链表长度是否大于8且桶大于 64
需要--> 重新计算key的hash值对应所分配的桶位置
判断桶插入位置
桶--数组大小
容量是否够++ size > threshold
红黑树插入
1.先遍历判断 k 的hash 与该位置存在的所有元素的k的hash比较是否有相同的
遍历比较equals
threshold(阈值)
数组该位置是否为数节点
true
否
链表
是
意味着此位置上 存在一个或多个数据(链表或加红黑树)
threshold:阈值
End
当前桶所指向位置直接插入
遍历该桶下的链表准备插入
扩容之后,数组长度变了,在数组的下标跟数组长度有关,得 1.先重算 hash 2.在判断新的桶位置
结论:表示当HashMap的size大于threshold时会执行resize操作。
比较大小
直接可以插入,成为该位置(桶)的第一个元素
获取
equals
无
capacitycapacity译为容量。capacity就是指HashMap中桶的数量。默认值为16。一般第一次扩容时会扩容到64,之后好像是2倍。总之,容量都是2的幂。
红黑树
为了避免一个桶下面的链表或者红黑树的数据太多,导致查询或分布不好,所以也需要检测扩容
新分配的桶位置上面是否有数据
Start
该位置是否为空即:table[x] == null
桶扩容 resize(初始16)
根据键值 key 计算 hash 值得到即将插入的数组索引 x(桶位置)
loadFactor译为装载因子。
转换为红黑树插入
桶扩容 resize(增加一倍的桶2的冥)
链表插入
装载因子用来衡量HashMap满的程度。loadFactor的默认值为0.75f
table数组是否为空
扩容
hash 碰撞
0 条评论
回复 删除
下一页