众所周知,HashMap初始容量16,负载因子0.75,如果我们没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,是非常影响性能的。同样设置过大浪费内存,因此设置一个合适的初始容量是有必要的!
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Map<String, Object> map = new HashMap<>(8);
for (int i = 0; i < 13; i++) {
map.put(String.valueOf(i), i);
}
Class<?> mapType = map.getClass();
Method capacity = mapType.getDeclaredMethod("capacity");
capacity.setAccessible(true);
System.out.println("capacity : " + capacity.invoke(map) + " size : " + map.size());
}
计算公式:initialCapacity = (需要存储的元素个数 / 负载因子) + 1
注意⚠️取最近的2的n次幂。
2 -> 4
12 -> 16
13 -> 32