分配的Java HashMap大小

时间:2019-02-20 11:45:36

标签: java hashmap

Java Hash Map具有size()方法, 它反映了在哈希映射中设置了多少个元素。 我有兴趣知道哈希图的实际大小是多少。 我尝试了不同的方法,但是找不到正确的方法。 我将初始容量设置为16

HashMap hm = new HashMap(16);
    for(int i=0;i<100;++i){
        System.out.println(hm.size());
        UUID uuid = UUID.randomUUID();
        hm.pet(uuid ,null);

    }

当我添加此大小可以增加的值时,如何检查实际分配的大小?

2 个答案:

答案 0 :(得分:2)

  

哈希图的实际大小是多少

我假设您正在询问容量。容量是容纳HashMap的存储桶的阵列的长度。默认情况下,初始容量为16。

capacity方法不是公开的,但是您可以基于当前的size,初始容量和负载系数来计算当前的容量。

如果使用默认值(例如,当使用无参数构造函数创建HashMap时),初始容量为16,默认负载因子为0.75。这意味着,当大小达到16 * 0.75 == 12时,容量将翻倍至32。一旦大小达到32 * 0.75 == 24,容量将翻倍至64。

如果将不同的初始容量和/或负载系数传递给构造函数,则计算将受到相应影响。

答案 1 :(得分:1)

您可以使用Reflection来检查地图的实际分配大小(存储桶大小)

HashMap<String, Integer> m = new HashMap<>();
m.put("Abhi", 101);
m.put("John", 102);

System.out.println(m.size());   // This will print 2

Field tableField = HashMap.class.getDeclaredField("table");
tableField.setAccessible(true);
Object[] table = (Object[]) tableField.get(m);

System.out.println(table.length);  // This will print 16