HashMap特性和put原理

HashMap的特点
1、存储无序
2、可以null键null值
3、键值是唯一的不会重复
4、jdk1.8之前是链表+数组 1.8后的链表+数组+红黑树
5、阈值(边界值)> 8 并且数组长度大于 64,才将链表转换为红黑树,变为红黑树的目的是为了高效的查询。

HashMap主要是用来处理键值对形式的数据
HashMap是基于哈希表队Map的一种实现
其中有loadFactor负载因子 默认值是0.75
threshold表示能容纳的键值对的临界点 计算公式是数组长度*负载因子
size是HashMap中实际存在的键值对数量
modCount字段用来记录HashMap内部结构发生改变的次数
并且HashMap有一个默认的长度叫做INITIAL_CAPACITY为16

HashMap采用了数组+链表 在jkd1.8之后加入了红黑树
HashMap的数组部分称为哈希桶 当链表长度大于8且key的数量大于64时时用红黑树存储数据并且在小于6的时候使用链表来存储

每个Node节点存储的数据是:计算出来的hash值,Key,Value,下一个节点的Node<Key,Value> next;
Node是HashMap的内部类,实现了Map.Entry的接口,本质也是一个键值对

put:
在存储数据的时候要计算要存储在Hash桶中的位置
1、先调用hashCode()方法获取key的hashCode值
2、然后进行高位运算 将算出的hashCode右移16位 获取高16位
3、与原hashCode的低16位进行异或运算
4、最后将取得的hashCode值-1进行与运算 取得该对象的存储保留位(也就是下标)

put - 扩展:
当插入已有key的不同value时 例如已有<a,CCC>  再次put一个<a,BBB>的时候 将新的值赋值给a,当插入对象大小超过临界点值的时候
HashMap将新建一个Hash桶数组 并重新赋值(jdk1.7和1.8的赋值方式不同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG-0408

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值