JDK1.7和JDK1.8中HashMap的区别

1. 底层实现结构不同

       JDK1.7:数组+链表

       JDK1.8:数组+链表+红黑树

2. 扰动函数不同

       JDK1.7:九次扰动,四次位运算+五次异或运算

 JDK1.8:两次扰动,1次位运算+1次异或运算

3. resize()函数功能不同

       JDK1.7:resize()为扩容,inflateTable()为初始化底层数组

       JDK1.8:resize()为初始化+扩容

4. 扩容的判断时机不同

       JDK1.7:数据插入前

JDK1.8:数据插入后

5. 扩容的判断条件不同

       JDK1.7:超过阈值且发生hash碰撞则进行扩容

JDK1.8:超过阈值或链表转为红黑树且数组元素小于64

6. 扩容后数据存储位置计算方式不同

       JDK1.7:重新计算元素存储位置

JDK1.8:扩容后的位置 = 原位置/原位置+旧容量

7. 新增元素插入位置不同

       JDK1.7:头插法

JDK1.8:尾插法

HashMap 负载因子为什么是0.75? 

HashMap的负载因子为什么默认是0.75?这篇文章告诉你答案_hashmap加载因子为什么是0.75_程序员万京游的博客-CSDN博客

【基础知识】什么是哈希冲突?_芦苇猫的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值