最推荐使用 toarray(new type[0]) 将 arraylist 转为指定类型引用数组,类型安全且简洁;不可用无参 toarray() 强转,会抛 classcastexception;基本类型数组需手动遍历转换。

Java 中 ArrayList 转换为普通一维数组,最常用、最推荐的方式是使用 toArray(T[]) 方法,传入一个与目标类型匹配的空数组(通常用 new Type[0])。
用 toArray(new Type[0]) 安全转成指定类型数组
这是 Java 8+ 推荐写法,类型安全、简洁且避免反射开销:
- 传入
new String[0](或对应泛型类型),ArrayList 会返回String[],不是Object[] - 即使传入长度为 0 的数组,ArrayList 也会自动创建合适大小的新数组,无需预估容量
- 示例:List
list = Arrays.asList("a", "b", "c");
String[] arr = list.toArray(new String[0]);
别用 toArray() 直接返回 Object[]
无参的 toArray() 返回 Object[],不能直接强转为 String[] 等具体类型,否则运行时报 ClassCastException:
- 错误写法:String[] arr = (String[]) list.toArray(); // 运行时抛异常
- 原因:Object[] 和 String[] 是不同运行时类型,JVM 不允许这种向下强转
注意泛型擦除,数组类型必须明确
ArrayList 的泛型在运行时已擦除,所以 toArray() 无法自动推断目标类型,必须由你提供类型信息:
- 不能写
list.toArray()后再强转 —— 类型信息丢失 - 必须显式传入
new Integer[0]、new User[0]等,让方法知道要生成什么类型的数组 - 基本类型(如 int)不支持泛型,需用包装类(Integer),或手动遍历转换
如果要转基本类型数组(如 int[]),需手动遍历
ArrayList 只能存引用类型,所以没有 ArrayList<int></int>。若原始数据是 List<integer></integer>,要得到 int[],只能循环赋值:
- 示例:List
list = Arrays.asList(1, 2, 3);
int[] arr = new int[list.size()];
for (int i = 0; i - 也可用 Stream(Java 8+):int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











