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

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