HashMap(JDK1.8)

1、HashMap存储的数据结构

数组+单向链表的储存方式
在这里插入图片描述
加载因子:0.75,当数组储存的数据量超过75%时进行扩容。数组初始化大小为16,16*0.75=12,使用到12的时候进行扩容(双倍扩容16–>32),扩容必须为2的n次幂,因为计算hash值的时候进行&运算时,要保证011111来进行。
单向链表转成红黑树,当链表中的数据大于8时转,当红黑树的节点少于6时变成单向链表。
二叉树有利于查找,左子树节点小于根节点。
在这里插入图片描述
实际源码中是使用&运算来得到0-15的值,因为&运算效率更高。
在这里插入图片描述
当然,为了防止运算的结果总是为一个值,在hsahCode运算时进行了高16位与低16位进行异或运算来使hash值尽可能不一样。
在这里插入图片描述
put操作
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在jdk1.7没有红黑树这些优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值