https://www.bilibili.com/video/BV1FE411t7M7?p=13
先要了解HashMap 的扩容机制你要有这两个问题
当 HashMap 中的元素个数超过数组大小(数组长度)* loadFaxtor(负载因子)时,就会进行数组扩容,loadFactor 的默认值(DEFAULT_FACTOR)是 0.75,这是一个折中的取值。也就是说,默认情况下,数组大小为 16,那么当 HashMap 中的元素个数超过 16 x 0.75 = 12 (这个值就是阈值或者边界值 threshold 值)的时候,就把数组的大小扩展为 2 x 16 = 32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常耗性能的操作,所以如果我们已经预知 HashMap 中的元素的个数,那么预知元素的个数能够有效的提高 HashMap 的性能。
补充:
当 HashMap 中的其中一个链表的对象个数如果达到了 8 个,此时如果数组长度没有达到 64,那么 HashMap 会先扩容解决,如果已经达到 64,那么这个链表会变成红黑树,节点类型由 Node 变成 TreeNode 类型。当然如果映射关系被移除后,下次执行 resize 方法时判断树的个数低于 6,也会再把树转换为链表。