介绍HashMap的工作原理
hashmap的put方法执行流程
一、创建 HashMap, 初始容量为 16, 实际容量 = 初始容量*负载因子 (默认 0.75)= 12;
二、调用 put方法,会先计算key 的 hash 值:hash = key.hashCode()。
三、调用 tableSizeFor()方法,保证哈希表散列均匀。
四、计算 Nodes[index]的索引:先进行 index = (tab.length - 1) & hash。
五、如果索引位为 null,直接创建新节点,如果不为 null,再判断所因为上是否有元素
六、如果有:则先调用hash()方法判断,再调用 equals()方法进行判断,如果都相同则直接用新的 Value 覆盖旧的;
七、如果不同,再判断第一个节点类型是否为树节点(涉及到:链表转换成树的阈值,默认 8),如果是,则按照红黑树的算法进行存储;如果不是,则按照链表存储;
八、当存储元素过多时,需要进行扩容:默认的负载因子是 0.75,如果实际元素所占容量占分约变为原来的2 倍(newThr = oldThr << 1);