最推荐的方式是 new arraylist(arrays.aslist(arr)),适用于引用类型数组;基本类型数组需用 arrays.stream(arr).boxed().collect(collectors.tolist())。

Java 中将普通数组转换成 ArrayList 最常用、最推荐的方式是使用 Arrays.asList() 方法,但要注意它返回的是一个固定大小的列表,不是真正的 ArrayList 实例。如果需要可修改(比如能 add/remove)的 ArrayList,得再包装一层。
用 Arrays.asList() + new ArrayList() 构造(推荐)
这是最安全、最通用的做法,适用于任何引用类型数组(如 String[]、Integer[]),也支持泛型推导:
- String[] arr = {"a", "b", "c"};
- List
list = new ArrayList(Arrays.asList(arr));
这样得到的 list 是标准的 java.util.ArrayList,支持增删改查所有操作。
注意:Arrays.asList() 本身不返回 ArrayList
Arrays.asList(arr) 返回的是 Arrays 类的一个内部静态子类(类似 ArrayList 但不可扩容),调用 add() 或 remove() 会抛 UnsupportedOperationException。常见误写:
- // ❌ 错误:list2 不可修改
- List
list2 = Arrays.asList(arr); - list2.add("d"); // 运行时报错
基本类型数组不能直接用 Arrays.asList()
像 int[]、double[] 这类基本类型数组,传给 Arrays.asList() 会被整体当作一个元素(因为泛型只接受引用类型),结果是 List<int></int>,不是你想要的 List<integer></integer>:
- int[] nums = {1, 2, 3};
- List
wrong = Arrays.asList(nums); // 只含一个元素
解决方法:先转成包装类型数组,或用 Stream(Java 8+):
- // 方式一:手动装箱(适合小数组)
- Integer[] boxed = Arrays.stream(nums).boxed().toArray(Integer[]::new);
- List
list = new ArrayList(Arrays.asList(boxed)); - // 方式二:一步到位(推荐)
- List
list2 = Arrays.stream(nums).boxed().collect(Collectors.toList());
小结:按需选择写法
- 引用类型数组 → 直接
new ArrayList(Arrays.asList(arr)) - 基本类型数组 → 用
Arrays.stream(arr).boxed().collect(Collectors.toList()) - 仅需只读视图(不增删)→ 可用
Arrays.asList(arr),轻量高效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











