Java中将集合转换为数组最推荐使用toArray(T[])方法,传入长度为0的泛型数组(如new String[0])以确保类型安全、避免ClassCastException;基本类型需用Stream或工具类转换。
Java中将集合转换为数组最常用、最推荐的方式是使用集合的 toArray(T[]) 方法,它能避免类型擦除带来的问题,确保类型安全。
这是最安全、最通用的方式。传入一个与目标类型一致的数组作为参数,方法会尝试填充该数组;如果数组长度不够,会自动创建新数组返回。
String[]、Integer[]
new String[0]),让 JVM 自动分配合
int[]),只能传引用类型数组示例:
Listlist = Arrays.asList("a", "b", "c"); String[] arr = list.toArray(new String[0]); // 安全且简洁
该方法返回 Object[],无法直接强转为具体类型数组,否则会抛出 ClassCastException。
String[] arr = (String[]) list.toArray(); —— 运行时异常Object[] 的场景,不推荐用于类型明确的转换Java 集合框架不支持基本类型,所以 List 等装箱集合无法直接转成 int[]。需手动遍历或借助工具类:
ArrayUtils.toPrimitive()(需引入依赖)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[]) 的正确用法就能覆盖绝大多数需求。