Maps.newHashMapWithExpectedSize

Maps.newHashMapWithExpectedSize 是 Guava 库中的一个静态方法

用于创建一个具有预期大小的 HashMap。它通过合理地预估所需的容量,减少 HashMap 在扩容时的开销,从而提升性能。

方法签名

1
public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(int expectedSize)

参数

  • expectedSize:预期 HashMap 的大小,也就是你打算存入的键值对数量。此方法会根据这个值来计算合适的初始容量,以尽量减少扩容操作。

关键点:是预期键值对的大小,不是预期容器大小!,实际容量是 expectedSzie ÷ (3/4) 向 2^n 向上取值

返回值

  • 返回一个初始化好的 HashMap<K, V> 对象,其容量已经根据传入的 expectedSize 进行了优化。

重要说明:

  1. 容量与负载因子HashMap 默认的负载因子是 0.75,也就是说,当 HashMap 的元素数量达到容量的 75% 时,HashMap 就会进行扩容。newHashMapWithExpectedSize 会根据传入的预期大小 expectedSize 和默认负载因子,推算出适当的初始容量,以避免频繁扩容。
  2. 性能优化:如果你知道 HashMap 大概需要存储多少元素,使用这个方法可以减少 HashMap 的内部重分配操作,进而提升性能。
  3. 实际容量:由于 HashMap 的容量必须是 2 的幂次方,实际分配的容量大概率会大于传入的 expectedSize

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import com.google.common.collect.Maps;
import java.util.HashMap;

public class Example {
public static void main(String[] args) {
// 创建一个具有预期大小的 HashMap,预期要存储 10 个元素
HashMap<String, Integer> map = Maps.newHashMapWithExpectedSize(10);

// 添加元素
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);

// 输出 HashMap 的内容
System.out.println(map);
}
}

使用场景

  • 当你清楚 HashMap 中大致的键值对数量时,可以使用此方法来优化性能。特别是在构建大规模 HashMap 或需要频繁进行增删操作的场景下,能够有效减少不必要的扩容开销。

注意事项

  • 如果实际存储的元素数量大大超过 expectedSizeHashMap 依然会进行扩容。此方法并不限制最大存储容量,只是帮助优化初始容量。

总结

Maps.newHashMapWithExpectedSize 是一个非常实用的方法,当你可以预估 HashMap 大小时,能够减少内存开销和提升性能,是构建高效 Java 应用的一个有力工具。