HashMap内部实现原理?

HashMap内部实现原理:

1)当调用put方法往HashMap中存键值对时,会把key的hashCode值交给Hash

算法进行计算,算出来一个地址值,该地址值决定着该键值对存在数组中的那个位置.

2)找到该存储地址位置时会在调用equals方法来比较是否存在相同的key,如果不存在则把该键值对存在该位置,如果存在则替换其value值.

3)如果在调用put方法时传入key不相同,但是key的hashCode值交给Hash算法进行计算时得到了相同的地址值,那么就会产生链表.会在同一个地址上存入两个key不相同的键值对,先存入的键值对被放到链表的尾部,后存入放到链表首部,当链表的长度达到8时,保存第9个链表元素时会将链表转成红黑树。

4)产生链表会影响查询效率,所以被存入的键值对对象都会重写equals和hashcode方法,但链表不能完全避免,原因是可能存在巧合key不相同但HashCode值相同.

5)当调用get方法时传入key,把key的hashCode值交给Hash算法进行计算,算出来一个地址值,通过该地址找到元素后在调用equals方法来比较key是否存在,若存在则返回其value值.

hash默认的空间16,加载因子是0.75

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值