HashMap扩容机制
2019-11-12 本文已影响0人
MIRROR1217
HashMap如何扩容的
HashMap
里面数据存储数量=threshold
,而threshold
是由tableSizeFor()
处理得到的,也就是threshold
的值必须是2的平方。
简单举例来说
-
HashMap
初始容量指定为 1000,会被tableSizeFor()
调整为 1024,但是它只是表示table
数组为 1024,扩容的重要依据扩容阈值会在resize()
中调整为 768(1024 * 0.75),所以会触发扩容; - 当想用
HashMap
存放 1w 条数据时,实际上经过 tableSizeFor() 方法处理之后,就会变成 2 的 14 次幂 16384,再算上负载因子 0.75f,实际在不触发扩容的前提下,可存储的数据容量是 12288(16384 * 0.75f),所以不会触发扩容。
所以简单来说,想要不触发扩容机制,最安全的做法是将初始值除以0.75;
![]()
很简单对吧!
(感谢:https://www.jianshu.com/p/299e76a7dac1)