Java中将集合转换为数组最推荐使用toArray(T[])方法,传入长度为0的泛型数组(如new String[0])以确保类型安全、避免ClassCastException;基本类型需用Stream或工具类转换。

Java中将集合转换为数组最常用、最推荐的方式是使用集合的 toArray(T[]) 方法,它能避免类型擦除带来的问题,确保类型安全。
使用 toArray(T[]) 方法(推荐)
这是最安全、最通用的方式。传入一个与目标类型一致的数组作为参数,方法会尝试填充该数组;如果数组长度不够,会自动创建新数组返回。
- 必须传入与集合元素类型匹配的泛型数组,如
String[]、Integer[] - 建议传入长度为 0 的数组(如
new String[0]),让 JVM 自动分配合适大小,避免浪费空间 - 不能传入基本类型数组(如
int[]),只能传引用类型数组
示例:
Listlist = Arrays.asList("a", "b", "c"); String[] arr = list.toArray(new String[0]); // 安全且简洁
避免使用 toArray()(无参版本)
该方法返回 Object[],无法直接强转为具体类型数组,否则会抛出 ClassCastException。
立即学习“Java免费学习笔记(深入)”;
- 例如:
String[] arr = (String[]) list.toArray();—— 运行时异常 - 仅适用于临时需要
Object[]的场景,不推荐用于类型明确的转换
处理基本类型集合(如 int、long)
Java 集合框架不支持基本类型,所以 List 等装箱集合无法直接转成 int[]。需手动遍历或借助工具类:
- 用传统 for 循环逐个取值并赋给基本类型数组
- 使用 Apache Commons Lang 的
ArrayUtils.toPrimitive()(需引入依赖) - JDK 8+ 可结合 Stream:
list.stream().mapToInt(Integer::intValue).toArray()
示例(Stream 方式):
Listints = Arrays.asList(1, 2, 3); int[] arr = ints.stream().mapToInt(Integer::intValue).toArray();
注意点与常见误区
转换过程看似简单,但容易踩坑:
- 传入的数组若长度大于集合大小,多余位置会被设为
null(引用类型)或默认值(如0对于Integer[]) - 不要用
Arrays.asList(array).toArray()做“数组→集合→数组”来回转,效率低且无意义 - 并发集合(如
CopyOnWriteArrayList)也支持toArray,但要注意其快照语义——返回的是调用时刻的副本
不复杂但容易忽略细节,掌握 toArray(T[]) 的正确用法就能覆盖绝大多数需求。










