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

ArrayList添加元素:如何借助集合API便捷跳过重复项实现列表合并

实现ArrayList去重合并的便捷方法

当然有啦!你完全不用自己写繁琐的遍历逻辑,Java自带的API或者常用的第三方工具库就能用几行代码搞定这个需求,下面给你几种实用的方案:

1. 原生Java 8+ Stream API(无需额外依赖)

这是最推荐的原生解决方案,用Stream的过滤和遍历操作就能完成,代码简洁易读:

// 过滤arryTwo中已存在于arryOne的元素,再添加到arryOne
arryTwo.stream()
       .filter(item -> !arryOne.contains(item))
       .forEach(arryOne::add);

注:contains()方法底层虽然还是基于遍历,但代码层面你完全不需要自己实现循环逻辑,借助API就完成了需求。

2. 利用Set去重(兼顾顺序与性能)

如果你在意性能(比如集合元素很多时,contains()的遍历效率较低),可以借助LinkedHashSet来同时实现去重和保留原集合的顺序:

// 先把arryOne的元素放入LinkedHashSet(自动去重+保序)
Set<String> tempSet = new LinkedHashSet<>(arryOne);
// 添加arryTwo的所有元素,重复元素会被自动忽略
tempSet.addAll(arryTwo);
// 再把Set转回ArrayList(如果需要修改原arryOne,直接赋值即可)
arryOne = new ArrayList<>(tempSet);

这种方法的优势在于HashSet的contains()是O(1)时间复杂度,比ArrayList的O(n)更高效,适合处理大数据量的集合。

3. 引入Guava工具库(简化代码)

如果你的项目已经引入了Guava库,可以用它的集合工具类进一步简化代码:

// 合并两个集合并去重,返回一个不可变的Set
Set<String> mergedSet = Sets.union(Sets.newHashSet(arryOne), Sets.newHashSet(arryTwo));
// 转成ArrayList
arryOne = new ArrayList<>(mergedSet);

如果需要保留顺序,同样换成LinkedHashSet即可:

Set<String> mergedSet = new LinkedHashSet<>(arryOne);
mergedSet.addAll(arryTwo);
arryOne = new ArrayList<>(mergedSet);

4. Java 17+ 更简洁的新API

如果你使用的是Java 17及以上版本,可以用Stream的concat()和distinct()生成新的无重复集合:

// 生成新的不可变List
List<String> mergedList = Stream.concat(arryOne.stream(), arryTwo.stream())
                               .distinct()
                               .toList();
// 如果需要可变的ArrayList,改用collect方法
List<String> mutableMergedList = Stream.concat(arryOne.stream(), arryTwo.stream())
                                       .distinct()
                                       .collect(Collectors.toCollection(ArrayList::new));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:44:09