HashMap底层实现过程

2024-10-18 13:25:58

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程

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

HashMap底层实现过程
猜你喜欢