Java HashMap工作原理及实现

1.参考
(1)Java HashMap工作原理及实现
https://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/

https://cloud.tencent.com/developer/article/1167574
(2)如果两个对象不相同,他们的hashcode可能相同?
https://myhadoop.iteye.com/blog/2059833

2.摘抄笔记
注意:
(1)什么时候会使用hashmap?他有什么特点?
是基于Map接口的实现,存储键值对时,他可以接收null的键和值,是非同步的,hashmap存储着Entry(hash,key,value,next)对象。
(2)你知道hashmap的工作原理吗?
(a)使用hash的方式,通过put和get存储和获取对象。
(b)存储对象时,我们将键值对传递给put方法是,它调用hashCode
计算hash值,然后进一步得到存储的位置进行存储
(c)获取对象时,调用key的hashCode方法,计算hash从而得到位置,
进一步调用key的equals方法确定键值对。如果发生碰撞,会用链表将其组织。
(3)如果hashmap的大小超过了负载因子定义的容量,怎么办?
如果超过负载因子(默认0.75即3/4),会重新resize一个原来长度两倍的hashmap,并重新调用hash方法进行组织。
3. put函数的实现
put函数大致的思路为:

对key的hashCode()做hash,然后再计算index;(key是唯一的hashcode可能存在两个对象相同)

如果没碰撞直接放到bucket里;
如果碰撞了,以链表的形式存在buckets后;
如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树;
如果节点已经存在就替换old value(保证key的唯一性)
如果bucket满了(超过load factor*current capacity),就要resize。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值