ArrayList 和 HashMap 的默认大小是多少?
查看完整题解
参考回答
直接回答
先分清元素数、容量与扩容阈值。无参新建的 ArrayList 和 HashMap,size 都是 0。OpenJDK 21 中,两者都延迟分配实际存储;ArrayList 首次普通追加通常分配 10 个槽位,HashMap 首次插入通常分配 16 个桶,默认负载因子为 0.75,阈值为 12。
讲清原理
size 是已经放了多少项;ArrayList 的容量是能放多少引用;HashMap 的容量是桶数,多个映射可能落在同一桶。阈值则决定何时考虑扩容,不能把“16 个桶”说成“最多放 16 条数据”。
这里说的是无参构造后的 OpenJDK 21 实现路径,不是所有构造器和未来版本的永久保证。例如显式容量零的 ArrayList,其首次增长行为就不应套用无参构造的数字。
例子与易错点
Java 21 的 main 片段:
System.out.println(new java.util.ArrayList<>().size());
System.out.println(new java.util.HashMap<>().size());
var map = java.util.HashMap.<String, Integer>newHashMap(100);
System.out.println(map.size());
三行都输出 0。newHashMap(100) 表示预计保存 100 条映射,仍没有预装元素。容量属于实现层细节,别用绕过模块封装的反射演示来混淆它与公开 size API。
相关题:第 5 题、第 41 题、第 44 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。