最简单说明Java HashMap底层数据结构实现

本文只谈数据结构,先说结论:

  • HashMap底层数据结构实现基于散列链表(数组 + 链表)见:HashMap数据结构-数组+单链表.png
  • HashMap底层数据结构中的链表Java1.8 之前是单链表,在Java1.8 之后某个链表的长度超过阈值(默认为8)并且HashMap的总size 大于64 时会替换为红黑树 见:HashMap数据结构-数组+红黑树.png
HashMap数据结构-数组+单链表.png
HashMap数据结构-数组+红黑树.png

明确这两点我们再来讨论具体实现细节,首先我们来看看散列链表 这个结构中的数组 部分,切入点在java.util.HashMap#put()java.util.HashMap#putVal()java.util.HashMap#resize()的方法调用链中,着重看java.util.HashMap#resize()方法,梗概如下:

final Node[] resize() {
        ......
        //重点代码在这里,直接new了一个数组赋值给table,这个table就是我们散列链表中的数组部分
        @SuppressWarnings({"rawtypes","unchecked"})
        Node[] newTab = (Node[])new Node[newCap];
        table = newTab;
        ......
        return newTab;
    }

其次是链表/红黑树结构,切入点代码为java.util.HashMap#put()java.util.HashMap#putVal()

你可能感兴趣的:(最简单说明Java HashMap底层数据结构实现)