Java中数组转集合最常用Arrays.asList(),但返回固定大小列表,不可增删;需可变集合时应包装为ArrayList或HashSet,基本类型数组需先装箱;集合转数组需注意类型匹配。

Java中将数组转换为集合,最常用且简单的方式是使用 Arrays.asList() 方法,但它返回的是固定大小的列表,不能直接增删元素;若需真正可变的集合(如 ArrayList 或 HashSet),还需进一步包装。
用 Arrays.asList() 转成 List(注意不可变性)
该方法适用于对象类型数组(如 String[]、Integer[]),不支持基本类型数组(如 int[])。
-
Arrays.asList(arr)返回的是Arrays内部的静态List实现,底层仍引用原数组,修改列表会反映到数组上 - 它不支持
add()、remove()等改变结构的操作,调用会抛出UnsupportedOperationException - 示例:String[] arr = {"a", "b", "c"};
Listlist = Arrays.asList(arr);
转成真正的可变 ArrayList
如果需要后续添加或删除元素,应将 Arrays.asList() 的结果传入 new ArrayList() 构造器。
- 这样创建的是独立的、可动态扩容的
ArrayList,与原数组无关联 - 示例:List
list = new ArrayList(Arrays.asList(arr)); - 对
list的增删不会影响原数组,反之亦然
转成 Set 或其他集合类型
若需去重或按集合接口操作,可借助构造器或 Stream 流式处理:
立即学习“Java免费学习笔记(深入)”;
- 转
HashSet:Setset = new HashSet(Arrays.asList(arr)); - JDK 8+ 推荐用 Stream(更灵活,尤其适合过滤/映射后收集):List
list = Arrays.stream(arr).collect(Collectors.toList()); - 基本类型数组(如
int[])必须先转为包装类型流:IntStream.of(intArr).boxed().collect(Collectors.toList());
集合转回数组的常用方式
集合转数组有两类典型场景:已知类型、或泛型擦除后需指定运行时类型。
- 对象数组:用
collection.toArray(new Type[0]),推荐传入空数组(如new String[0]),避免类型检查问题 - 基本类型数组无法直接通过
toArray()获取,需手动遍历或用 Stream:int[] arr = list.stream().mapToInt(Integer::intValue).toArray(); - 注意:
toArray()无参版本返回Object[],不能直接强转为具体类型数组










