HashMap底层原理
2021-08-05 22:14:54 5 举报
各位大佬如果觉得还行,请点个赞吧~~~感谢!
作者其他创作
大纲/内容
判断集合中元素总个数是否达到64个
判定为同一个key,覆盖原来的entry对象
达到
判断是否有equals也相同的值
源码中采用hash&(length-1)进行取模,因为当length是2的n次方时,hash%length==hash&(length-1)。且二进制位操作 &,相对于%能够提高运算效率,
判断此槽位上是否有值
取出value返回
没有
未达到
判断map集合中元素个数是否达到容量的75%
相等
将此key与此槽位上的所有值(可能有多个,链表)依次进行equals比较
判断槽位上的值是否与key相等
无值,为null
进行扩容,扩容为原容量的2倍(扩容后会重新取模分配槽位存储)
将此槽位上的链表转变为红黑树
在new HashMap的时候会创建一个空数组。
有值
new HashMap();
不指明初始容量大小时,默认大小为16
对key进行HashCode运算,得到Hash值(int),再将此Hash值对数组容量进行取模,得到此key所在槽位
get(Key)
1.7之前采用头插法,1.8开始采用尾插法
判断链表长度是否达到8
遍历此槽位下的链表,直到找到相等的key值,返回其value值
有
收藏
收藏
0 条评论
回复 删除
下一页