HashMap实现原理

一、简单用文字来叙述HashMap实现原理

  1. HashMap是采用Hash表的结构,通过拉链法和再哈希法来处理hash冲突的。
  2. HashMap里面实现了一个静态内部类Entry,它有4个参数hash、key、value和next。HashMap实际上就是一个entry数组。
  3. 首先,我们通过key.hashCode()来获得key的hashcode,并与entry数组的长度取模得到该key-value所组成的entryX所在的下标index。
  4. 接着,我们判断该index下的链表中是否已经存在该key。若存在,则将其value值进行替换;若不存在,则将该entryX放置在该index,并使其next指向原entry对象。
  5. 如果遇到null键,将其放置在该数组的第一位,做法同上。
  6. 如果该数组中的容量超过默认容量时,则扩大表容量为旧表的2倍(最大值为Integer,MAX_VALUE),同时将旧表的内容映射到新表中(再哈希法)。
  7. JDK7用的是链表,JDK8在数据长度达到某个阙值的时候,转而用红黑树来存储。
二、参考博客



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值