Java 中 List 与数组转换的核心 API 总结表

转换方向方法 / 方式说明返回结果类型适用场景
List→数组list.toArray()无参方法,返回包含 List 所有元素的 Object[]Object[]无需指定数组类型的场景(慎用,易出类型错误)
List→数组list.toArray(T[] a)带参方法,返回与参数同类型的数组,参数长度不足时自动创建新数组泛型数组 T[](如 String[]需指定数组类型的场景(推荐使用)
数组→ListArrays.asList(T... a)将数组转换为 List,返回 Arrays 内部类 ArrayList(非 java.util.ArrayListList<T>(固定大小)快速转换且无需修改 List 长度的场景
数组→Listnew ArrayList<>(Arrays.asList(arr))基于 Arrays.asList() 的结果创建可修改的 java.util.ArrayListjava.util.ArrayList<T>需要增删元素的场景
数组→ListStream API(Arrays.stream(arr).collect(...)Java 8+ 方法,支持对象数组直接转换,基本类型数组需配合 boxed()List<T>(如 List<Integer>处理基本类型数组(如 int[])或需要流式操作的场景

核心注意事项

  1. 类型匹配问题

    • List 转数组时,toArray() 无参方法返回 Object[]不可直接强转为具体类型数组(如 String[]),否则抛出 ClassCastException,需用 toArray(T[] a) 并指定类型(推荐 new T[0] 作为参数)。
    • 数组转 List 时,Arrays.asList() 仅支持对象数组(如 String[]),若传入基本类型数组(如 int[]),会将整个数组作为单个元素存入 List(返回 List<int[]>),需用 Stream API 的 boxed() 方法处理(如 int[] 转 List<Integer>)。
  2. 可修改性与数据共享

    • Arrays.asList() 返回的 List 是固定大小的,调用 add()/remove() 会抛出 UnsupportedOperationException;且该 List 与原数组共享数据,修改 List 元素会同步修改原数组(反之亦然)。
    • 若需可修改的 List,需用 new ArrayList<>(Arrays.asList(arr)) 包装,此时 List 与原数组独立,修改互不影响。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐