3种方法,用Java找出两个List中的重复元素
本文分享自华为云社区《如何用Java找出两个List中的重复元素,读这一篇就够了》,作者: 努力的阿飞。
在Java编程中,我们经常需要找出两个列表(List)中的重复元素。在本文中,我们将探讨三种方法来实现这一目标。
方法一:使用HashSet
Java中的HashSet是一个不允许有重复元素的集合。我们可以利用这个特性,通过合并两个List并计算差集,来找出重复的元素。
以下是一个通过使用HashSet数据结构来找出两个List中的重复元素的代码示例。
// 类名:ListUtils // 函数名:findDuplicateElements // 函数功能:找出两个List中的重复元素 // POM依赖包:无 import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ListUtils { /** * 找出两个List中的重复元素 * @param list1 第一个List * @param list2 第二个List * @return 重复的元素集合 */ public static <T> List<T> findDuplicateElements(List<T> list1, List<T> list2) { Set<T> set1 = new HashSet<>(list1); // 将List1转换为Set,去除重复元素 Set<T> duplicateSet = new HashSet<>(); for (T element : list2) { // 遍历List2的元素 if (set1.contains(element)) { // 如果Set1中包含List2的元素 duplicateSet.add(element); // 将重复的元素添加到重复元素的Set中 } } return new ArrayList<>(duplicateSet); // 将重复元素的Set转换回List并返回 } } // 函数示例 // 找出两个List中的重复元素示例 // 入参:list1,第一个List // list2,第二个List // 出参:duplicates,重复的元素集合 // 调用示例: // List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); // List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // List<Integer> duplicates = ListUtils.findDuplicateElements(list1, list2); // System.out.println(duplicates); // 输出结果:例如,第一个List为:[1, 2, 3, 4, 5],第二个List为:[4, 5, 6, 7, 8] // 则输出结果为:[4, 5] ``` // 温馨提示:以上代码由 FuncGPT 生成,编译打包请使用 ListUtils.java 文件。
以上代码其实是由全栈式全自动开发工具-飞算SoFlu软件机器人推出的转出AI生成Java函数的FuncGPT(慧函数)生成的,通过输入简单的指令“找出两个List中的重复元素”,就秒级生成了以上代码。
FuncGPT(慧函数)使用HashSet数据结构的这种方法的优点是简单且高效。此外,它返回了一个包含所有重复元素的List,方便进一步处理。但需要注意的是,结果中的元素顺序可能会发生变化。开发者可根据实际的需求,通过设置入参、出参,调整需求的方式,来优化生成的代码。
方法二:使用Stream API
Java 8引入了Stream API,使我们能够更简洁地处理集合。我们可以使用Stream API的distinct()方法来过滤掉重复的元素,然后通过filter()方法找出两个List中的重复元素。
以下是一个通过使用Stream API来找出两个List中的重复元素的代码示例。
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // 将列表转换为Stream Stream<Integer> stream1 = list1.stream(); Stream<Integer> stream2 = list2.stream(); // 找出两个Stream的重复元素 List<Integer> commonElements = Stream.concat(stream1, stream2) .distinct() .collect(Collectors.toList()); // 打印出重复元素 System.out.println(commonElements); } }
这种方法可以保留元素的原始顺序,但需要注意处理大型数据集时的性能问题。
方法三:使用HashMap
我们也可以使用HashMap来找出两个List中的重复元素。将每个元素作为键,将其出现的次数作为值存储在HashMap中。然后,我们遍历HashMap,找到出现次数大于1的元素,即为重复元素。
以下是一个通过使用HashMap来找出两个List中的重复元素的代码示例。
import java.util.*; public class Main { public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // 将列表转换为HashMap Map<Integer, Integer> map = new HashMap<>(); list1.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1)); list2.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1)); // 找出HashMap中值大于1的键,即为重复元素 List<Integer> commonElements = map.entrySet().stream() .filter(x -> x.getValue() > 1) .map(Map.Entry::getKey) .collect(Collectors.toList()); // 打印出重复元素 System.out.println(commonElements); } }
这种方法可以保留元素的原始顺序,但在处理大型数据集时可能会消耗较多的内存。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
语雀 10 月 23 日故障原因及修复过程公告
语雀团队就 10 月 23 日重大服务故障发布了复盘分析。 各位语雀的用户: 10 月 23 日语雀出现重大服务故障,且持续7个多小时才完全恢复,给用户使用造成极大不便,对此我们深感抱歉。经过复盘,我们在这里向大家进一步说明故障原因、修复过程和改进措施。 故障原因及处理过程: 10 月 23 日下午,服务语雀的数据存储运维团队在进行升级操作时,由于新的运维升级工具bug,导致华东地区生产环境存储服务器被误下线。受其影响,语雀数据服务发生严重故障,造成大面积的服务中断。 为了尽快恢复服务,我们和数据存储运维团队全力进行数据恢复工作,但受限于恢复方案、数据量级等因素,整体用时较长。具体过程如下: 14:07数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线; 14:15联系硬件团队尝试将下线机器重新上线; 15:00确认因存储系统使用的机器类别较老,无法直接操作上线,立即调整恢复方案为从备份系统中恢复存储数据。 15:10开始新建存储系统,从备份中开始恢复数据,由于语雀数据量庞大,此过程历时较长。 19 点完成数据恢复;同时为保障数据完整性,...
- 下一篇
故障解析丨Clone节点导致主从故障
1.背景概述 在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL 8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。 通过解析binlog发现,同一时刻主从节点都在执行同一条语句,因此询问业务是否在主从节点都执行了定时任务,业务回复定时任务只在主节点执行。 最后排查发现,克隆后的从节点的定时任务也会是开启的状态,因此同一时刻,主从节点同时执行定时任务,导致主从报错,最终将从节点的定时任务关闭后解决此问题。 2.问题复现 本次测试基于 GreatSQL 8.0.32-24 greatsql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 8.0.32-24 | +-----------+ 1 row in set (0.00 sec) 1.搭建一套主从架构 略 2.创建event greatsql> create database test; greatsql> use test; greatsql...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题