当前位置: 首页>后端>正文

JDK8 中 HashMap 的变化

  • 结构变化:由数组+链表变成了数组+链表+红黑树


    JDK8 中 HashMap 的变化,第1张
  • 链表长度>=8,转换为红黑树;链表长度减少为 6,红黑树再变回链表。只有总的节点数量>=64 的时候,才会有红黑树,否则直接进行主数组扩容

  • 链表节点为 Node,红黑树节点为 TreeNode。Node 是 TreeNode 的父类


    JDK8 中 HashMap 的变化,第2张
  • 添加到链表后面:jdk7中新的节点增加到最前,jdk8之后新节点加到最后(也是避免死循环的一种解决方式)


    JDK8 中 HashMap 的变化,第3张
  • 主数组的创建不是构造方法中搞定,而是 put 元素时通过 resize()搞定

  • 哈希表扩容后原来链表节点重新散列后不改变之前顺序,也不会形成循环链表

注意:JDK8 HashMap 虽然针对 JDK7 的缺点做了某些修改,但是仍旧是线程不安全的,并发情况下建议使用 ConcurrentHashMap,或者使用 Collections 加锁。


https://www.xamrdz.com/backend/37n1929055.html

相关文章: