请描述List和数组之间相互转换的具体过程
参考回答
在 Java 中,List
和数组可以相互转换。以下是具体的转换方式和示例代码:
1. 从数组转换为 List
Java 提供了多个方法将数组转换为 List
:
1.1 使用 Arrays.asList()
- 方法描述:将数组转换为一个固定大小的
List
,原数组和生成的List
是共享数据的(即修改其中一个会影响另一个)。 - 注意:转换后的
List
不能调整大小(如add()
或remove()
操作会抛出UnsupportedOperationException
)。
代码示例:
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 定义数组
String[] array = {"A", "B", "C"};
// 数组转换为 List
List<String> list = Arrays.asList(array);
// 输出 List
System.out.println(list); // 输出:[A, B, C]
// 修改数组会影响 List
array[0] = "Z";
System.out.println(list); // 输出:[Z, B, C]
}
}
1.2 使用 ArrayList
构造函数
- 方法描述:创建一个新的
ArrayList
,将数组中的元素拷贝到List
中。新生成的List
不会受原数组的影响。
代码示例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 定义数组
String[] array = {"A", "B", "C"};
// 使用 ArrayList 构造函数
List<String> list = new ArrayList<>(Arrays.asList(array));
// 修改 List 不会影响原数组
list.add("D");
System.out.println(list); // 输出:[A, B, C, D]
System.out.println(Arrays.toString(array)); // 输出:[A, B, C]
}
}
1.3 使用 Collections.addAll()
- 方法描述:将数组中的所有元素添加到现有的
List
中。 - 适用场景:可以向现有的
List
添加数组中的元素。
代码示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 定义数组
String[] array = {"A", "B", "C"};
// 创建一个空的 List 并添加数组元素
List<String> list = new ArrayList<>();
Collections.addAll(list, array);
// 输出 List
System.out.println(list); // 输出:[A, B, C]
}
}
2. 从 List
转换为数组
Java 提供了多个方法将 List
转换为数组:
2.1 使用 toArray()
方法
- 方法描述:将
List
转换为数组。 - 注意:需要指定目标数组的类型。
代码示例:
import java.util.ArrayList;
import java.util.List;
public class ListToArrayExample {
public static void main(String[] args) {
// 定义 List
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 转换为数组
String[] array = list.toArray(new String[0]);
// 输出数组
for (String s : array) {
System.out.println(s); // 输出:A B C
}
}
}
2.2 使用流(Stream)API
- 方法描述:通过 Java 8 的流操作,将
List
转换为数组。 - 优点:代码简洁,适用于 Java 8 及以上版本。
代码示例:
import java.util.ArrayList;
import java.util.List;
public class ListToArrayExample {
public static void main(String[] args) {
// 定义 List
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 使用 Stream 转换为数组
String[] array = list.stream().toArray(String[]::new);
// 输出数组
for (String s : array) {
System.out.println(s); // 输出:A B C
}
}
}
3. 注意事项
3.1 从数组到 List
- 使用
Arrays.asList()
时,生成的List
是固定大小的,不能增删元素。 - 如果需要一个可以动态修改大小的
List
,可以使用new ArrayList<>(Arrays.asList(array))
。
3.2 从 List
到数组
List
转换为数组时,目标数组的类型需要匹配List
元素的类型。- 推荐使用
list.toArray(new String[0])
,效率较高且易于理解。
4. 总结对比表
操作 | 方法 | 特点 |
---|---|---|
数组转 List |
Arrays.asList(array) |
固定大小的 List ,与原数组共享数据。 |
new ArrayList<>(Arrays.asList(array)) |
创建一个可变大小的 List ,与原数组无关。 |
|
Collections.addAll(list, array) |
添加数组到现有的 List 。 |
|
List 转数组 |
list.toArray(new String[0]) |
推荐方式,易用高效。 |
list.stream().toArray() |
使用 Java 8 流操作,简洁且现代化。 |