笔者一直很好奇HashMap插入、扩容究竟是怎么进行的,专门研究了下JDK1.8的源码,下面专门进行讲解。
先讲解一下JDK8中HashMap的Key求hashcode的hash算法,较之前JDK7更简单了点:
求Key的hash值,不就是为了计算出他在HashMap中的index值嘛,如下:
在没有发生hash冲突的情况下,采用的是(n-1) & hash ,整个过程如下:
A、插入元素(put)
1、插入第一个元素:
2、故意制造hash冲突,调试由数组+链表转化为数组+红黑树的条件
由源码可知,数组+链表转化为数组+红黑树的条件是:链表长度大于8并且数组长度大于等于64