HashMap数组的初始容量16和负载因子为0.75。当HashMap中元素个数超过负载因子loadFactor时就会触发扩容,loadFactor默认大小为0.75,默认情况下数组大小为16,当hashmap中元素个数超过16 * 0.75 = 12时,数组的大小扩展为2 * 16=32 即扩大一倍,新建一个扩容后大小的数组,然后重新计算每个元素在新数组中的位置,这是一个非常消耗性能的操作,所以如果已经预知hashmap中元素的个数,预设元素的个数能够有效的提高Hashmap的性能。比如有1000个元素 new HashMap(1000), hashmap会自动将其设置为1024。 但是 0.75 * 1024 < 1000, 也就是说为了让0.75 * size > 1000, new HashMap(2048)才可以,避免了resize的问题。
Hashmap什么时候扩容 怎么扩容 扩容操作除了线程不安全还会影响性能,如何优化性能
触发条件
当HashMap中的元素数量超过阈值(threshold)时,会触发扩容操作。这个阈值通常是当前容量(capacity)与负载因子(loadFactor,默认值为0.75)的乘积。当HashMap中的元素数量超过了容量的75%时,就会进行扩容。
计算新容量
当扩容发生时,HashMap会计算一个新的容量。新的容量通常是当前容量的两倍,并且这个容量总是保持为2的幂次。这是因为HashMap的某些操作(如计算索引位置)可以通过位运算来优化,而2的幂次能够简化这些位运算。
创建新数组
根据计算出的新容量,HashMap会创建一个新