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

数组和 List 怎样相互转换?

查看完整题解

参考回答

直接回答

对象数组转 List 可用 Arrays.asList,它返回连接原数组的固定大小列表;需要独立可增长列表,再用 ArrayList 构造复制。List 转对象数组可用 toArray(String[]::new)。基本类型数组不会被 Arrays.asList 自动拆成多个包装元素,必须显式装箱或逐项复制。

讲清原理

固定大小不等于完全不可修改:Arrays.asList 支持替换已有位置,修改通常反映回原数组,但不能增删。List.of 与 List.copyOf 是不可修改结果,还拒绝 null,不能用“都是转列表”掩盖差别。

toArray 返回的数组隔离了列表结构;对象元素仍是原来的引用,不是深拷贝。若元素类型不适合所提供的数组类型,还可能出现运行期数组存储异常。

例子与易错点

Java 21 的 main 片段:

String[] source = {"A", "B"};
var view = java.util.Arrays.asList(source);
view.set(0, "X");
System.out.println(source[0]);
String[] copy = view.toArray(String[]::new);
copy[0] = "Y";
System.out.println(view.get(0));
System.out.println(java.util.Arrays.asList(new int[]{1, 2}).size());

输出 X、X、1。最后一行只有一个元素,这个元素是整个 int 数组。不要据此误以为得到了 List<Integer>。

相关题:第 16 题、第 21 题、第 34 题。

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

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