hashmap源码分析(基于jdk1.8)
2019-06-26 20:35
183 查看
概述:
jdk1.8 对于hashmap进行比较大的优化,底层实现由之前的"数组加链表"改为"数组+链表+红黑树",就hashmap的几个常量用的重要方法和jdk1.8之前的死循环问题展开讨论.jdk1.8的hashmap的数据结构如下,当链表节点较少时仍然是以链表存在,当链表节点较多时(大于8)会转为红黑树.
几个点:
先了解一以下几个点,有利于更好的理解hashmap
1.头节点指的是table表上索引位置的节点,也就是链表的头节点.
2.根节点(root节点)指的是红黑树最上面的那个节点,也就是没有父节点的节点.
3.红黑树的根节点一定是索引位置的头节点(也就是链表的头节点)通过moveroottofront方法来维持.
4.转为红黑树节点后,链表的结构还存在,通过next属性维持,红黑树节点在进行操作时都会维护链表结构,并不是转为红黑树节点,链表结构就不存在了.
5.在红黑树上,叶子节点也可能有next节点,因为红黑树的结构根链表的结构是互不影响的,不会因为是叶子节点就说该节点已经没有next节点.
6.源码中一些变量定义:如果定义了一个节点p,则pl为p的左节点,pr为p的右节点.pp为p的父节点,ph为p的hash值,pk为p的key值,kc为key的类等等.源码中很喜欢在if/for等语句中进行赋值并判断.
7.链表中移除一个节点如下图操作,其他操作同理.
相关文章推荐
- 源码分析系列1:HashMap源码分析(基于JDK1.8)
- 源码分析系列1:HashMap源码分析(基于JDK1.8)
- 长文慎入 HashMap 源码分析 基于 JDK 1.8
- java基础系列之ConcurrentHashMap源码分析(基于jdk1.8)
- 源码分析系列1:HashMap源码分析(基于JDK1.8)
- 源码分析系列1:HashMap源码分析(基于JDK1.8)
- HashMap源码分析(基于JDK1.8)
- HashMap源码分析-基于JDK1.8
- HashMap源码分析(基于JDK1.8)
- HashMap源码分析_JDK1.8版本
- JDK1.8源码分析之HashMap
- ArrayList源码分析(基于JDK1.8)
- Java线程池源码分析(基于JDK1.8)
- Java集合框架成员之ArrayList类的源码分析(基于JDK1.8版本)
- HashMap源码之hash()函数分析(JDK 1.8)
- jdk1.8 hashMap源码分析
- HashMap源码分析(基于JDK1.6)
- java集合(4):HashMap源码分析(jdk1.8)
- Java集合框架成员之LinkedList类的源码分析(基于JDK1.8版本)
- HashMap源码分析 JDK1.8