最常用方式是new arraylist(arrays.aslist(arr)),适用于对象数组;原始类型数组需先转包装类或用stream处理,因arrays.aslist()返回固定大小列表,不支持add、remove等操作。

Java 中将普通数组转成 ArrayList 最常用、最简洁的方式是使用 Arrays.asList(),但要注意它返回的是一个**固定大小的列表视图**,不是真正的 ArrayList 实例。如果需要可修改(比如能 add()、remove())的 ArrayList,得再套一层构造器。
用 Arrays.asList() + new ArrayList() 构造(推荐)
这是最稳妥、通用的做法,适用于对象数组(如 String[]、Integer[]):
- 先用
Arrays.asList(arr)得到一个List(底层是Arrays.ArrayList,不可扩容) - 再用
new ArrayList(...)包装,得到真正的、可变的ArrayList
示例:
String[] arr = {"a", "b", "c"};ArrayList
list.add("d"); // ✅ 成功,不会报错
原始类型数组(如 int[])不能直接转
Arrays.asList() 对原始类型数组无效,因为泛型不支持基本类型。例如:Arrays.asList(new int[]{1,2,3}) 会把整个数组当成一个元素(返回 List<int></int>)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
解决方法:
- 改用包装类数组:用
Integer[]替代int[],再按上法转换 - 或用 Java 8+ 的 Stream:
Arrays.stream(arr).boxed().collect(Collectors.toCollection(ArrayList::new))
// ❌ 错误写法:
// Arrays.asList(ints) → List
// ✅ 正确之一(推荐转包装类):
Integer[] boxed = Arrays.stream(ints).boxed().toArray(Integer[]::new);
ArrayList
注意:避免直接用 Arrays.asList() 当作 ArrayList
它返回的列表不支持结构修改操作(如 add、remove、clear),调用会抛 UnsupportedOperationException。
List
list.add("z"); // ❌ 运行时报错!
小结:一句话记住
要可增删的 ArrayList,就写 new ArrayList(Arrays.asList(你的对象数组));原始类型数组先转成对应包装类数组,或走 Stream 流式处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










