HashMap的底层其实是一个数组结构,数组中的每一项又是一个链表或者红黑树
存储结构是数组+链表+红黑树
1.计算 key 的 hash 值。计算方式是 (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
2.检查当前数组是否为空,为空需要进行初始化,初始化容量是 16 ,负载因子默认 0.75。
3.计算 key 在数组中的坐标。计算方式:(容量 - 1) & hash.因为容量总是2的次方,所以-1的值的二进制总是全1。方便与 hash 值进行与运算。
1)如果计算出的坐标元素为空,创建节点加入,put 结束。
i)如果当前数组容量大于负载因子设置的容量,进行扩容。
2)如果计算出的坐标元素有值。
i)如果 next 节点不为空(key存在),循环查看 next