0%

HashMap扩容机制

文章字数:273,阅读全文大约需要1分钟

HashMap初始大小为16,即内部容器容量为16。但是如果是自定义大小的HashMap,那么什么情况下会触发扩容?

关键点

  1. loadFactor:负载因子,默认0.75f。当内部元素大于容器容量*负载因子时触发扩容。

  2. table:实际存储数据的数组transient Node<K,V>[] table;初始化大小也就是table的大小。

  3. tableSizeFor():这个方法保证传入的初始化值是2 的 N 次幂,比如传入1000,经过这个方法转换就成了1024。而实际存储大小为768(1024 * 0.75)

扩容机制

  1. 传入的初始大小经过tableSizeFor()转换,保证值为2 的 N 次幂
  2. 初始化负载因子为0.75f
  3. 生成内部存储数组table,大小为初始化传入的值,默认16
  4. 当内部元素超过扩容阈值(初始化大小*负载因子)时扩容,扩容大小为原理的一倍

建议

初始值 = (需要存储的元素 / 负载因子) + 1