JDK1.8中的HashMap数据结构

JDK1.8中的HashMap数据结构使用了数组+链表+红黑树,数组和链表结构和JDK1.7中的基本一致,红黑树是一个新增的方式,具体实现类是内部类TreeMap。
这是为了为了解决hash碰撞严重导致链表过长后查询占据较低的缺陷引进的。
想深入了解红黑树,需要对树、二叉树23树、234树有一定的认识,HashMap信你得红黑树是234树的一种具体实现,红黑树就是一个能维持相对平衡的二叉树,使用红黑两种颜色来划分节点,红黑树存在如下约束条件:

  1. 每个节点要么是黑色,要么是红色。(节点非黑即红)
  2. 根节点是黑色。
  3. 每个叶子节点(NULL)是黑色(为了简单期间,一般会省略该节点)。
  4. 如果一个节点是红色的,则它的子节点必须是黑色的。(也就是说父子节点不能同时为红色)
  5. 从一个节点到该节点的每一个叶子子孙节点的所有路径上包含相同数目的黑节点。(这一点是平衡的关键)
  6. 新插入节点默认为红色,插入后需要校验红黑树是否符合规则,不符合则需要进行操作。

你可能感兴趣的:(JDK1.8中的HashMap数据结构)