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 与原数组独立,修改互不影响。