HashMap初始容量指定規則

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章