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);
}
当我添加此大小可以增加的值时,如何检查实际分配的大小?
答案 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