java中arraylist转普通数组最推荐用toarray(new type[0]),可安全获得指定类型数组;无参toarray()只返回object[],强转会抛classcastexception;基本类型数组需手动拆箱或stream转换。

Java 中 ArrayList 转普通数组最常用、最推荐的方式是用 toArray() 方法,但要注意传入一个**指定类型和长度的数组**作为参数,否则会得到 Object[],无法直接当作 String[]、Integer[] 等使用。
用带泛型类型的数组调用 toArray(T[])
这是类型安全的方式,能直接获得目标类型的数组:
- 传入一个与 ArrayList 元素类型一致、长度为 0 的数组(如
new String[0]),JVM 会自动创建正确类型和大小的新数组返回; - 也可以传入已有数组(长度 ≥ ArrayList 大小),若够用则复用该数组,否则新建;
- 推荐用
new Type[0]写法——简洁、安全、无副作用,且现代 JVM 对其做了优化,性能不输预分配。
示例:
String[] arr = list.toArray(new String[0]); // ✅ 得到 String[]
别直接用无参 toArray() —— 它只返回 Object[]
无参 toArray() 总是返回 Object[],即使 ArrayList 是 Integer 或 String 类型:
-
Object[] objArr = list.toArray();—— 编译通过,但不能强转成String[],运行时抛ClassCastException; - 这是 Java 泛型擦除导致的历史限制,不能绕过,必须用带参重载。
基本类型数组?ArrayList 不支持,得手动转换
ArrayList 只能存包装类(如 Integer),不能直接转成 int[]:
- 没有内置方法一步到位;
- 需遍历 + 拆箱,或用 Stream(Java 8+):
int[] ints = list.stream().mapToInt(Integer::intValue).toArray(); - 注意:空列表调用
stream().mapToInt(...).toArray()会返回空int[],安全。
小技巧:配合 Arrays.asList() 实现双向转换
数组转 ArrayList 很简单:new ArrayList(Arrays.asList(arr));反过来就用上面的 toArray(new T[0])。两者搭配,数据流转更顺畅。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











