ArrayList 合并两个列表的常用方法
使用 addall() 方法是最直接且高效的合并方式。调用目标列表实例的 addall(collection extends e> c) 方法,将另一个列表作为参数传入,即可将所有元素追加到当前列表末尾。该方法会自动处理内部数组扩容,无需手动计算容量或逐个添加元素。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MergeExample {
public static void main(String[] args) {
List<string> list1 = new ArrayList(Arrays.asList("A", "B"));
List<string> list2 = new ArrayList(Arrays.asList("C", "D"));
// 核心操作:将 list2 合并到 list1
list1.addAll(list2);
System.out.println(list1); // 输出: [A, B, C, D]
}
}</string></string>
上述代码展示了标准做法。执行后,list1 包含原有序列及 list2 的所有元素。addAll 返回布尔值,表示列表是否因添加而改变,通常用于判断非空情况。若需保留原列表不变,可先创建新列表并调用此方法。
合并时如何处理重复元素与顺序
addAll() 严格保持源列表的顺序,并将所有元素按序追加。如果业务逻辑要求去重,需结合 LinkedHashSet 或流式 API 处理。默认行为不检查重复项,仅做物理追加。

import java.util.*;
import java.util.stream.Collectors;
public class DistinctMerge {
public static void main(String[] args) {
List<string> list1 = Arrays.asList("A", "B", "C");
List<string> list2 = Arrays.asList("B", "C", "D");
// 方法一:使用 LinkedHashSet 去重并保持插入顺序
Set<string> set = new LinkedHashSet(list1);
set.addAll(list2);
List<string> distinctList = new ArrayList(set);
System.out.println(distinctList); // [A, B, C, D]
// 方法二:Java 8 Stream API
List<string> streamList = Stream.concat(list1.stream(), list2.stream())
.distinct()
.collect(Collectors.toList());
System.out.println(streamList); // [A, B, C, D]
}
}</string></string></string></string></string>
当输入列表存在重叠元素时,直接使用 addAll 会导致结果中包含重复项。通过 LinkedHashSet 转换,可以过滤掉重复值,同时维持首次出现的顺序。Stream 方式则提供了更函数化的解法,适合链式调用场景。
基于 addAll 返回值的具体问题
addAll() 方法的返回值类型为 boolean,表示列表是否发生了结构性修改。如果源列表为空,或者目标列表已包含源列表所有元素且未触发扩容(极少见),可能返回 false,但通常只要添加了至少一个元素即返回 true。该返回值常用于日志记录或条件分支判断。
import java.util.*;
public class ReturnCheck {
public static void main(String[] args) {
List<string> target = new ArrayList();
List<string> source = Arrays.asList("X", "Y");
boolean changed = target.addAll(source);
System.out.println(changed); // true
List<string> emptySource = new ArrayList();
boolean noChange = target.addAll(emptySource);
System.out.println(noChange); // false
}
}</string></string></string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











