- jdk1.7及1.7之前,数组+链表
- jdK1.8之后,数组+链表+红黑树
未指定容量创建Hashmap时会在第一次添加元素时进行扩容
map.add(k,v)
PutVal函数
resize函数(扩容)
执行扩容和数组拷贝后返回到Putval()中
key不存在时
key存在时
当size>=threshold时,触发扩容
(n-1)&hash 减少哈希冲突并且n的长度必须为2的整数倍,目的:取模操作获得对应下标
数组拷贝时的三种情况
元素数组下标链表为空时
元素数组下标链表不为空时
为红黑树时
底层执行该方法,并会对数组进行检查,是否使用红黑树(红黑树的转换条件是链表长度大于等于8,并且数组的长度大于等于64)等