在Java中如何将数组转换为集合_Java数组与集合互转说明

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

Java中将数组转换为集合,最常用且简单的方式是使用 Arrays.asList() 方法,但它返回的是固定大小的列表,不能直接增删元素;若需真正可变的集合(如 ArrayListHashSet),还需进一步包装。

用 Arrays.asList() 转成 List(注意不可变性)

该方法适用于对象类型数组(如 String[]Integer[]),不支持基本类型数组(如 int[])。

  • Arrays.asList(arr) 返回的是 Arrays 内部的静态 List 实现,底层仍引用原数组,修改列表会反映到数组上
  • 它不支持 add()remove() 等改变结构的操作,调用会抛出 UnsupportedOperationException
  • 示例:String[] arr = {"a", "b", "c"};
    List list = Arrays.asList(arr);

转成真正的可变 ArrayList

如果需要后续添加或删除元素,应将 Arrays.asList() 的结果传入 new ArrayList() 构造器。

  • 这样创建的是独立的、可动态扩

    容的 ArrayList,与原数组无关联
  • 示例:List list = new ArrayList(Arrays.asList(arr));
  • list 的增删不会影响原数组,反之亦然

转成 Set 或其他集合类型

若需去重或按集合接口操作,可借助构造器或 Stream 流式处理:

  • HashSetSet set = 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[],不能直接强转为具体类型数组