HashMap底层实现过程
1、①创建 HashMap, 初始容量为 16, 实际容量 = 初始容量*负载因子 (默认 0.75)= 12;

2、②调用 put方法,会先计算key 的 hash 值:hash = key.hashCode()。

3、③调用 tableSizeFor()方法,保证哈希表散列均匀。

4、④计算 Nodes[index]的索引:先进行 index = (tab.length - 1) & hash。

5、⑤如果索引位为 null,直接创建新节点,如果不为 null,再判断所因为上是否有元素

6、⑥如果有:则先调用hash()方法判断,再调用 equals()方法进行判断,如果都相同则直接用新的 Value 覆盖旧的;

7、⑦如果不同,再判断第一个节点类型是否为树节点(涉及到:链表转换成树的阈值,默认 8),如果是,则按照红黑树的算法进行存储;如果不是,则按照链表存储;

8、⑧当存储元素过多时,需要进行扩容:默认的负载因子是 0.75,如果实际元素所占容量占分约变为原来的2 倍(newThr = oldThr << 1);
