Java 中 List 与数组的转换
·
Java 中 List 与数组转换的核心 API 总结表
| 转换方向 | 方法 / 方式 | 说明 | 返回结果类型 | 适用场景 |
|---|---|---|---|---|
| List→数组 | list.toArray() | 无参方法,返回包含 List 所有元素的 Object[] | Object[] | 无需指定数组类型的场景(慎用,易出类型错误) |
| List→数组 | list.toArray(T[] a) | 带参方法,返回与参数同类型的数组,参数长度不足时自动创建新数组 | 泛型数组 T[](如 String[]) | 需指定数组类型的场景(推荐使用) |
| 数组→List | Arrays.asList(T... a) | 将数组转换为 List,返回 Arrays 内部类 ArrayList(非 java.util.ArrayList) | List<T>(固定大小) | 快速转换且无需修改 List 长度的场景 |
| 数组→List | new ArrayList<>(Arrays.asList(arr)) | 基于 Arrays.asList() 的结果创建可修改的 java.util.ArrayList | java.util.ArrayList<T> | 需要增删元素的场景 |
| 数组→List | Stream API(Arrays.stream(arr).collect(...)) | Java 8+ 方法,支持对象数组直接转换,基本类型数组需配合 boxed() | List<T>(如 List<Integer>) | 处理基本类型数组(如 int[])或需要流式操作的场景 |
核心注意事项
-
类型匹配问题:
- 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>)。
- List 转数组时,
-
可修改性与数据共享:
Arrays.asList()返回的 List 是固定大小的,调用add()/remove()会抛出UnsupportedOperationException;且该 List 与原数组共享数据,修改 List 元素会同步修改原数组(反之亦然)。- 若需可修改的 List,需用
new ArrayList<>(Arrays.asList(arr))包装,此时 List 与原数组独立,修改互不影响。
更多推荐


所有评论(0)