1. ArrayList 概述

本文将介绍如何向一个已初始化的 ArrayList 中批量添加多个元素。

关于 ArrayList 的基础使用,可参考 Java ArrayList 详解。本文聚焦于“批量添加”这一高频操作,总结几种实用且高效的写法,帮你少踩坑、写得更优雅。

2. 使用 addAll 方法

最直接的方式是调用 List 接口提供的 addAll(Collection<? extends E> c) 方法,传入一个集合即可完成批量添加。

✅ 示例代码:

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
List<Integer> anotherList = Arrays.asList(5, 12, 9, 3, 15, 88);

list.addAll(anotherList);

⚠️ 注意事项:

  • addAll 添加的是对象引用,不是深拷贝。如果 anotherList 中的元素是可变对象,后续修改会影响原列表和目标列表。
  • 添加顺序按传入集合的迭代顺序进行。

3. 使用 Collections.addAll

Collections 工具类提供了静态方法 addAll,支持将可变参数数组直接添加到目标 List 中,无需先包装成集合。

这在初始化或临时添加几个元素时特别方便,写法更简洁。

✅ 示例 1:添加可变参数(适合少量元素)

List<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5);

✅ 示例 2:添加数组

List<Integer> list = new ArrayList<>();
Integer[] otherList = new Integer[]{1, 2, 3, 4, 5};

Collections.addAll(list, otherList);

⚠️ 同样地,这里也是引用传递,不会创建新对象。

💡 优势:

  • 不需要显式创建中间 List,减少对象创建开销。
  • 适用于数组转 List 的场景,简单粗暴。

4. 使用 Java 8 Stream API

Java 8 的 Stream 提供了更灵活的批量处理能力。虽然性能上不一定最优,但在需要过滤、跳过、映射等逻辑时非常有用。

基本用法

List<Integer> source = Arrays.asList(10, 20, 30);
List<Integer> target = new ArrayList<>(Arrays.asList(1, 2));

source.stream()
      .forEachOrdered(target::add);

📌 forEachOrdered 保证元素按原始顺序添加,避免并行流导致顺序错乱。

进阶操作:跳过与过滤

想跳过前 N 个元素?加个 skip 就行:

source.stream()
      .skip(1)  // 跳过第一个
      .forEachOrdered(target::add);

只添加大于 10 的值?用 filter

source.stream()
      .filter(i -> i > 10)
      .forEachOrdered(target::add);

null 安全处理

当 source 可能为 null 时,推荐使用 Optional 避免 NPE:

Optional.ofNullable(source)
        .ifPresent(target::addAll);

✅ 这种写法既安全又函数式,是现代 Java 编程中的推荐做法。

💡 注意:

  • target::addAlltarget::add 更高效,因为 addAll 内部会做批量扩容优化。
  • source 很大,stream + forEach 可能略慢于直接 addAll,但差距通常可忽略。

5. 总结

方法 适用场景 是否支持过滤 推荐指数
list.addAll(collection) 通用批量添加 ✅✅✅✅
Collections.addAll(list, elements...) 添加数组或可变参数 ✅✅✅✅✅
stream().forEach(add) 需要跳过、过滤、映射等逻辑 ✅✅✅✅
Optional + addAll 源集合可能为 null ✅(条件判断) ✅✅✅✅✅

📌 最佳实践建议:

  • 日常批量添加优先使用 addAllCollections.addAll
  • 需要条件判断或流式处理时,用 Stream 更清晰。
  • 所有对外部传入集合的操作,务必考虑 null 安全,Optional 是你的朋友。

所有示例代码已托管至 GitHub:https://github.com/john-doe/tutorials/tree/master/core-java-modules/core-java-collections-array-list


原始标题:Add Multiple Items to an Java ArrayList