初始化数组的流程
首先会判断旧容量是否大于0,如果不大于,则会给一个默认的容量16新建一个数组
扩容流程
首先判断旧容量是否大于0,如果不是初始化,这边一般都是为true,然后再计算新容量,新容量为旧容量的两倍,然后再新建一个数组,之后再遍历旧数组,判断e.next==null这个是判断当前这个数组索引位处是否是单个结点,就是判断这个结点的后一个结点是否存在,如果不存在则为单个数据,直接重新计算hash值放入新数组,如果不是单个数据,则判断是否是红黑树,如果是红黑树,则执行红黑树的添加流程,如果不是红黑树,说明是链表,则先遍历链表,然后判断e.hash&oldCap==0,这个是拆分链表,为了让hash数组更平均,减少hash冲突,如果满足这个条件,则数组下标不变,如果不满足则会平移一个旧数组容量长度
标签:扩容,判断,hash,HashMap,容量,链表,数组,红黑树,机制 From: https://blog.csdn.net/wbsdh/article/details/144037752