数组与 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 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。