You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比两个Java ArrayList 找出第二个数组中独有的新值

解决方案

你要实现的是两个集合的差集运算(取arrB相对于arrA的差集),下面提供几种不同适用场景的实现方式:

方法1:直接使用集合自带的removeAll方法(最简洁,适合小数据量)

直接复制arrB的所有元素到新集合,再移除所有arrA中存在的元素即可:

// 初始化第三个数组存储结果
ArrayList<String> result = new ArrayList<>(arrB);
result.removeAll(arrA);

这种方式代码量最少,但是removeAll底层是逐个遍历比对,时间复杂度是O(n*m),如果两个集合元素量过万的情况下效率会偏低。

方法2:用HashSet优化查询效率(适合大数据量场景)

把arrA的元素先存入HashSet,利用HashSet O(1)的查询特性过滤arrB的元素,时间复杂度可以降到O(n+m):

// 先把arrA转成HashSet降低查询成本
Set<String> arrASet = new HashSet<>(arrA);
ArrayList<String> result = new ArrayList<>();
for (String item : arrB) {
    if (!arrASet.contains(item)) {
        result.add(item);
    }
}

方法3:使用Java 8+ Stream流式写法(代码简洁且效率较高)

如果你的项目使用JDK8及以上版本,可以用Stream写出更简洁的流式代码,效率和HashSet方案一致:

Set<String> arrASet = new HashSet<>(arrA);
// 通用List返回写法
List<String> result = arrB.stream()
                          .filter(item -> !arrASet.contains(item))
                          .collect(Collectors.toList());

// 如果需要明确返回ArrayList类型,可以用下面的收集写法
// ArrayList<String> result = arrB.stream()
//                               .filter(item -> !arrASet.contains(item))
//                               .collect(Collectors.toCollection(ArrayList::new));

你提供的测试数据用以上三种方案运行,最终得到的结果都是["5", "X", "6", "7"],符合需求。

内容的提问来源于stack exchange,提问作者UserOfStackOverFlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:15:02