java 中如何实现数组和 List 之间的转换?

数组转List可用Arrays.asList()(固定大小)、new ArrayList(Arrays.asList())(可变)或Stream API(灵活处理);List转数组推荐使用list.toArray(new T[0])避免强转;注意Arrays.asList()返回的List不可增删且与

原数组互相影响,基本类型需通过Stream.boxed()转换。

在 Java 中,数组和 List 之间的转换是常见操作,主要通过 Arrays.asList()ArrayList 构造方法Stream API 实现。下面分别介绍具体方法。

数组转 List

将数组转换为 List 有多种方式,常用如下:

• 使用 Arrays.asList():适合固定大小的 List

这个方法返回的是 Arrays 的内部类 ArrayList,不支持添加或删除元素(不支持 add/remove)。

示例:
String[] array = {"a", "b", "c"};
List list = Arrays.asList(array);
• 使用 new ArrayList(Arrays.asList()):创建可变 List

如果需要对 List 进行修改,可以将其包装成新的 ArrayList。

示例:
String[] array = {"a", "b", "c"};
List list = new ArrayList<>(Arrays.asList(array));
list.add("d"); // 正常执行
• 使用 Stream API(Java 8+):更灵活,适合处理基本类型包装类

尤其适用于从数组构造不可变或可变列表,并支持链式操作。

示例:
String[] array = {"a", "b", "c"};
List list = Arrays.stream(array).collect(Collectors.toList());

List 转数组

List 转换为数组使用 toArray() 方法,有两种常见用法:

• 无参 toArray():返回 Object[],需强转(不推荐)
List list = Arrays.asList("a", "b", "c");
Object[] array = list.toArray();
• 带类型参数的 toArray(T[]):推荐方式,指定目标数组类型

传入一个相同类型的空数组,JVM 会自动创建正确类型的数组并填充。

示例:
List list = Arrays.asList("a", "b", "c");
String[] array = list.toArray(new String[0]);

也可以传入已有长度的数组,如 new String[list.size()],效果相同。

注意事项

• Arrays.asList() 返回的 List 是固定大小的

不能调用 add 或 remove,否则抛出 UnsupportedOperationException。

• 基本类型数组(如 int[])不能直接转 List

因为泛型不支持基本类型,需手动转换或使用 Stream。

示例:
int[] intArray = {1, 2, 3};
List integerList = Arrays.stream(intArray)
                                  .boxed()
                                  .collect(Collectors.toList());
• 数组和 List 的引用关系

Arrays.asList() 返回的 List 底层仍引用原数组,修改任一方会影响另一方。

基本上就这些。根据是否需要修改、数据类型和 Java 版本选择合适的方式即可。