美文网首页Java 杂谈
打印HashMap扩容时的容量大小

打印HashMap扩容时的容量大小

作者: 废柴傻狗 | 来源:发表于2019-03-06 22:18 被阅读1次

    思路:利用反射获取hashmap里的threshold(扩容上限)除以 负载因子 就得到容器大小了。

    public class Main {
      public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
    
        HashMap<String, Integer> hashMap = new HashMap<>();
        Class clazz = HashMap.class;
    // threshold是hashmap对象里的一个私有变量,若hashmap的size超过该数值,则扩容。这是通过反射获取该值
        Field field = clazz.getDeclaredField("threshold");
    //setAccessible设置为true可以开启对似有变量的访问
        field.setAccessible(true);
        int threshold = 0;
        for (int i = 0; i < 1000; i++) {
            hashMap.put(String.valueOf(i), 0);
            if ((int) field.get(hashMap) != threshold) {
                threshold = (int) field.get(hashMap);
    // 默认的负载因子是0.75,也就是说实际容量是/0.75
                System.out.println((int) field.get(hashMap) / 0.75);
            }
        }
      }
    }
    

    打印结果如下:
    16.0
    32.0
    64.0
    128.0
    256.0
    512.0
    1024.0
    2048.0

    这是hashmap添加1000个元素时容器容量大小的变化情况

    相关文章

      网友评论

        本文标题:打印HashMap扩容时的容量大小

        本文链接:https://www.haomeiwen.com/subject/ssefpqtx.html