衆所周知,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