HashMap,一篇文章征服面试官

HashMap实现的是map接口,是不安全的map容器,默认容量是16,负载因子为0.75,容量是2的n次幂。在JDK1.8之前底层是通过数组加链表实现,在JDK1.8及其以后通过的数组、链表、红黑树实现,当链表长度为8时,链表会转换为红黑树。
put源码简析
HashMap,一篇文章征服面试官
1.判断table是否为空或者长度是否为0。因此第一次put数据的时候都会进行resize,resize是对新数组容量,扩容阀值的重新计算,返回的是一个新数组。后面还有一段代码是当添加完数据后的size大于扩容阀值的时候会再次resize
2.判断该key的hash所映射到的那个桶是否为null,若为空直接添加节点。
3.若有值则判断该节点是否为红黑树的节点,是则使用putTreeVal添加数据
4.若有值且不是红黑树的节点,则判断该链表添加完数据后的长度是否大于等于8,如果是,则调用treeifyBin方法转换为红黑树