Java中,HashMap的底层实现原理

HashMap的底层实现原理

对于JDK7而言
1.HashMap hashMap = new HashMap();

  • 在实例化之后,底层创建了一个长度16的Entry[] table

2.hashMap.put(key1,value1)

  • 首先,调用key1所在类的hashCode(),计算key1的哈希值hashValue,hashValue经过某种计算得到key1在Entry中的位置sit1

  • 如果sit1上没有数据,key1-value1添加成功 —情况1

  • 如果sit1上有数据,比价key1的哈希值和site1上寂静存在的一个或多个数据的哈希值
    1.如果key1的哈希值与其他数据的哈希值不同,key1-value1添加成功 —情况2
    2.如果key1的哈希值与其他数据的某一个数据key2的哈希值相同,调用key1虽在类的equals()与之比较,
    如果返回False,keys-value1添加成功 —情况3
    如果返回True,那么将会使用value1替换key2对应的value2 —情况4

3.上述的情况2、情况3,key-value与该位置上已经存在的数据是以链表的方式进行存储的

对于JDK8而言
1.HashMap hashMap = new HashMap()

  • 在实例化之后,底层没有创建了一个长度16的数组

  • jdk8中的数组名字为Node不是Entry

2.hashMap.put(key1,value1)

  • 在调用put()之后,底层创建了一个长度16的Node[]

  • 存储过程和JDK7基本相同

  • 但是有一点不同,当数组的某个位置上的元素个数>8 且
    数组的长度>64时,此时此索引位置上所有的数据改为使用“红黑树”存储。这样做的目的是为了在遍历时,提高遍历效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值