HashMap扩容测试(基于java8进行测试)

2021-02-20  本文已影响0人  鸿雁长飞鱼龙潜跃

结论:初始容量为16的HashMap,当向这个集合中添加第13个键值对时,会触发扩容,扩容后的容量为32

测试代码如下:

package com.cr949.auto.docs.utils;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

/**

* @author cr949

* @description HashMap扩容测试

*/

public class HashMapCapacityTest {

    public static void main(String[] args) throws Exception{

        // HashMap初始容量16

        Map<String, String> map = new HashMap<>(16);

        Class<?> mapType = map.getClass();

        Method capacity = mapType.getDeclaredMethod("capacity");

        capacity.setAccessible(true);

        // 这里打印的初始 capacity = 16

        System.out.println("capacity :" + capacity.invoke(map));

        // 向HashMap中put12个元素

        map.put("222", "222");

        map.put("223", "222");

        map.put("224", "222");

        map.put("225", "222");

        map.put("226", "222");

        map.put("227", "222");

        map.put("228", "222");

        map.put("229", "222");

        map.put("230", "222");

        map.put("231", "222");

        map.put("232", "222");

        map.put("233", "222");

        // 当向HashMap中put12个元素时,容量capacity仍为16

        Method capacity2 = mapType.getDeclaredMethod("capacity");

        capacity2.setAccessible(true);

        System.out.println("capacity2 : " + capacity2.invoke(map));

        // 当向HashMap中put第13个元素时,会触发扩容,容量加倍,变成32

        map.put("234", "222");

        Method capacity3 = mapType.getDeclaredMethod("capacity");

        capacity3.setAccessible(true);

        System.out.println("capacity3 : " + capacity3.invoke(map));

    }

}

上一篇下一篇

猜你喜欢

热点阅读