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

数组与 ArrayList 有何区别,何时选数组?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

数组长度创建后固定,可以直接保存基本类型,也能保存对象引用;ArrayList 是可增长的引用列表,泛型参数不能直接写 int 等基本类型。数据量固定、处理基本数值或与要求数组的 API 交互时,数组很合适;需要频繁追加并使用列表接口时,ArrayList 更方便。

讲清原理

数组的 length 是固定槽位数,ArrayList 的 size 是当前元素数,其底层容量可比 size 大。ArrayList<Integer> 使用 Integer 引用,涉及装箱与拆箱;具体分配多少对象还受缓存等因素影响,不应说每次装箱一定新建对象。

数组还具有协变规则:String 数组可赋给 Object 数组变量,但错误写入会在运行期失败。泛型列表则通常不允许把 List<String> 赋给 List<Object>,把这类错误更多地挡在编译期。

例子与易错点

Java 21 的 main 片段:

int[] samples = {10, 20, 30};
var boxed = new java.util.ArrayList<Integer>();
for (int sample : samples) boxed.add(sample);
boxed.add(40);
System.out.println(samples.length + ":" + boxed.size());

输出 3:4。ArrayList 变长不影响原数组。选数组并不保证程序更快;是否有装箱、复制、访问局部性及真实数据规模,都应纳入测量。

相关题:第 4 题、第 10 题、第 37 题。

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

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