Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

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 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。