将 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]),性能良好且广泛兼容。
posted @ 2026-04-08 20:48  可以解决问题不大  阅读(57)  评论(0)    收藏  举报