HashMap的原理

HashMap的原理

Jdk1.8HashMap组成:数组+链表+红黑树默认初始容量是16最大容量是2的30次方默认扩容因子是0.75,达到四分之三就扩容链表长度达到8时就转红黑树当红黑树节点达到6时就转链表 HashMap里面实现一个静态内部类Entry,其重要的属性有 hash,key,value,next。

扩容原理:数组长度大于或等于64并且链表长度达到8时才会转红黑树否则就扩容,扩容后每个node的hash重新计算,并放入到新的HashMap里面去

HashMap的工作原理 :HashMap是基于散列法的原理,使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”HashMap是在bucket中储存键对象和值对象,作为Map.Entry。并不是仅仅只在bucket中存储值。

put: 计算key的hashCode将key的hashCode作为计算因子,通过哈希算法计算HashMap的数组下标index如果index下标的数组元素为空,直接put(新增元素)如果index下标的数组元素不为空,调用key的equal方法,判断index位置的链表是否存在如果找到链表中某个元素与key的equals方法相等,则使用value更新 如果未找到链表中某个元素与key的equals方法相等,则新增如果存在key节点,返回旧值,如果不存在则返回Null。

get:在get方法中,首先计算hash值,然后调用indexFor()方法得到该key在table中的存储位置,得到该位置的单链表,遍历列表找到key和指定key内容相等的Entry,返回entry.value值。HashMap碰撞:当两个对象的hashcode相同时,它们的bucket位置相同,就会发生碰撞

本人第一次开始写文章,写得不是很好欢迎各位提出意见和指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值