最稳妥的方式是用 new ArrayList<>(Arrays.asList(array)) 将对象数组转为可变 ArrayList;基本类型数组需先装箱或用 Stream 转换,因 Arrays.asList() 对基本类型会将整个数组视为单个元素。

Java 中将数组转换为 ArrayList 有多种方式,最常用的是 Arrays.asList() 方法,但要注意它返回的不是真正的 java.util.ArrayList,而是其内部固定大小的实现类。若需可修改(增删)的 ArrayList,必须额外包装一层。
使用 Arrays.asList() + new ArrayList(...) 构造新集合
这是最稳妥、推荐的做法,适用于所有对象类型数组(如 String[]、Integer[]),能获得真正可变的 ArrayList:
- 先调用
Arrays.asList(array)得到一个 List 视图(底层是数组,不支持 add/remove) - 再用
new ArrayList<>(list)构造新的动态 ArrayList
示例:
String[] arr = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(arr)); // ✅ 可 add/remove
list.add("d"); // 正常执行
注意基本类型数组不能直接使用 Arrays.asList()
int[]、double[] 等基本类型数组传入 Arrays.asList() 时,整个数组会被当作单个元素处理,导致结果不符合预期:
立即学习“Java免费学习笔记(深入)”;
int[] nums = {1, 2, 3};
List<int[]> wrong = Arrays.asList(nums); // ❌ 结果是包含一个 int[] 元素的列表
解决方法:先转为包装类型数组(如 Integer[]),或用 Stream(Java 8+):
- 手动转换:
Integer[] boxed = Arrays.stream(nums).boxed().toArray(Integer[]::new); - 直接流式转 List:
List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
避免直接使用 Arrays.asList() 返回值做增删操作
Arrays.asList() 返回的是 Arrays.ArrayList(静态内部类),继承自 AbstractList,但未重写 add()、remove() 等方法,调用会抛 UnsupportedOperationException:
String[] arr = {"x", "y"};
List<String> list = Arrays.asList(arr);
list.add("z"); // ❌ 运行时报错
除非你确定只读或仅需修改已有元素(set() 是支持的),否则务必包装成新 ArrayList。
小结:按场景选择合适方式
- 需要可变列表 → 用
new ArrayList<>(Arrays.asList(...))(对象数组)或 Stream(基本类型) - 仅需只读视图、性能敏感 → 直接用
Arrays.asList(...)即可 - 处理基本类型 → 必须先装箱,不可跳过这步


















