所有分类
  • 所有分类
  • 未分类

Java-JDK7与JDK8的HashMap的区别

简介

本文介绍JDK7与JDK8的HashMap的区别。

JDK7与JDK8的HashMap区别

JDK7JDK8
数据结构数组 + 链表。 复杂度:O(n)数组 + 链表 + 红黑树
(若链表长度大于等于8 且容量小于64 会进行扩容;若链表长度大于8 且数组长度大于等于64,会转化为红黑树(提高定位元素的速度);若红黑树节点个数小于6,则将红黑树转为链表。)
插入位置插入链表头部插入链表尾部
hash算法复杂简单。 红黑树效率高,提高查询效率的地方由红黑树实现,没必要像JDK7那么复杂。
扩容机制多线程可能导致:数据覆盖、读出为null、死循环多线程可能导致:数据覆盖、读出为null; 不会导致死循环(因为用了尾插)

19

评论4

请先

  1. 有点错误吧,我看了下源码,binCount 的计数从 0 开始,插入第一个元素时,binCount 为 0,插入第二个元素时为1...第八个元素时为7,所以包括8
    流年 2024-11-25 0
    • 谢谢指出,已修复。
      自学精灵 2024-11-26 0
  2. 链表长度这里是大于等于8,还是大于8,是否包括8。
    JNInRain 2024-10-19 0
    • 大于等于8。源码是这样的:binCount >= TREEIFY_THRESHOLD - 1,此时会转为红黑树。TREEIFY_THRESHOLD等于8,但binCount是从0开始的,所以是大于等于8
      自学精灵 2024-10-23 0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录