为了账号安全,请及时绑定邮箱和手机立即绑定

分配的 Java HashMap 大小

分配的 Java HashMap 大小

慕田峪4524236 2022-06-30 10:39:07
Java Hash Map 有一个 size() 方法,它反映了在 Hash Map 中设置了多少元素。我很想知道哈希图的实际大小是多少。我尝试了不同的方法,但找不到正确的方法。我将初始容量设置为 16HashMap 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 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您可以使用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


查看完整回答
反对 回复 2022-06-30
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

Hash Map 的实际大小是多少

我假设你问的是容量。容量是保存 s 的桶的数组的长度HashMap。初始容量默认为 16。

capacity方法不公开,但您可以根据当前size、初始容量和负载系数计算当前容量。

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

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


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号