美文网首页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扩容时的容量大小

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

  • HashMap、HashSet、TreeMap、LinkedHa

    HashMap HashMap底层实现是数组+链表。数组大小不满足时要进行扩容操作,扩容是将容量扩展为原先的2倍,...

  • HashMap&ConcurrentHashMap

    HashMap: 当前容量和装载因子,当数组长度大于当前容量和装载因子的乘积时,HashMap就会扩容。 寻址方式...

  • JDK1.7 版本中 HashMap 扩容

    扩容扩容是指当容器中元素的数量达到某个阈值时,容器自己进行的容量翻倍的操作。 JDK1.7 HashMap 扩容方...

  • 性能代码收藏

    HashMap扩容 Java HashMap采用了多次无符号位移运算计算容量,返回大于当前容量的符合2^n整型值,...

  • HashMap

    Q: HashMap什么时候会进行扩容?HashMap在初始化时可以给定初始容量和负载因子,默认的初始容量和负载因...

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

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

  • HashMap:如何进行扩容?

    在说明hashMap如何进行扩容之前,先说下为什么要进行扩容?是因为hashMap初始化的容量不够用了吗?不是,是...

  • jdk1.8 HashMap resize方法解析

    扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载...

  • Java ArrayList阅读笔记

    ArrayList: 默认初始化容量为10; 每次插入前先进行扩容检测及扩容,扩容大小为原容量的一半(例:10+5...

网友评论

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

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