分配的 Java HashMap 大小

Java Hash Map 有一个 size() 方法,它反映了在 Hash Map 中设置了多少元素。我很想知道哈希图的实际大小是多少。我尝试了不同的方法,但找不到正确的方法。我将初始容量设置为 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);


    }

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


慕田峪4524236
浏览 141回答 2
2回答

猛跑小猪

您可以使用Reflection来检查地图的实际分配大小(桶大小)。HashMap<String, Integer> m = new HashMap<>();m.put("Abhi", 101);m.put("John", 102);System.out.println(m.size());&nbsp; &nbsp;// This will print 2Field tableField = HashMap.class.getDeclaredField("table");tableField.setAccessible(true);Object[] table = (Object[]) tableField.get(m);System.out.println(table.length);&nbsp; // This will print 16

蓝山帝景

Hash Map 的实际大小是多少我假设你问的是容量。容量是保存 s 的桶的数组的长度HashMap。初始容量默认为 16。该capacity方法不公开,但您可以根据当前size、初始容量和负载系数计算当前容量。如果使用默认值(例如,HashMap使用无参数构造函数创建时),初始容量为 16,默认负载因子为 0.75。这意味着一旦大小达到 16 * 0.75 == 12,容量将翻倍至 32。一旦大小达到 32 * 0.75 == 24,容量将翻倍至 64。如果您将不同的初始容量和/或负载因子传递给构造函数,则计算将受到相应影响。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java