将 List 转换为数组
在 Java 中,将 List 转换为数组主要有以下几种常用方法,推荐根据你使用的 Java 版本选择最合适的方式:
1. 使用 toArray(T[] a) 方法(最常用,兼容所有版本)
这是最标准、最通用的方法。你需要传入一个指定类型的数组作为参数。
import java.util.ArrayList;
import java.util.List;
public class ListToArrayExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// 方法:传入一个大小为0的数组(JVM会自动创建合适大小的数组)
String[] array = list.toArray(new String[0]);
// 打印验证
for (String s : array) {
System.out.println(s);
}
}
}
注意:
- 不要使用
new String[list.size()]除非你确定性能敏感且想避免反射开销(现代 JVM 对new String[0]优化很好)。- 不能使用
toArray()无参方法直接转为特定类型数组,因为它返回的是Object[],强制转换会抛出ClassCastException。
2. 使用 Java 8+ Stream API(函数式风格)
如果你已经在使用 Stream,或者喜欢函数式编程风格,可以这样写:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ListToArrayStream {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// 使用 stream().toArray()
String[] array = list.stream().toArray(String[]::new);
// 打印验证
for (String s : array) {
System.out.println(s);
}
}
}
3. Java 11+ 新增方法:toArray(IntFunction<T[]> generator)
从 Java 11 开始,Collection 接口新增了更简洁的 toArray 重载方法:
// Java 11+
String[] array = list.toArray(String[]::new);
这比 Java 8 的 Stream 方式更简洁,也比传统 toArray(new String[0]) 更直观。
❌ 常见错误做法
// 错误!不能直接将 Object[] 转换为 String[]
String[] array = (String[]) list.toArray(); // 抛出 ClassCastException
总结建议
| Java 版本 | 推荐方法 | 示例 |
|---|---|---|
| Java 8 及以下 | list.toArray(new T[0]) |
list.toArray(new String[0]) |
| Java 8 | stream().toArray() |
list.stream().toArray(String[]::new) |
| Java 11+ | list.toArray(generator) |
list.toArray(String[]::new) |
✅ 最佳实践:
- 如果项目是 Java 11+,推荐使用
list.toArray(String[]::new),简洁高效。 - 如果项目是 Java 8,推荐使用
list.toArray(new String[0]),性能良好且广泛兼容。

浙公网安备 33010602011771号