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);
}
}
这种方法可以保留元素的原始顺序,但在处理大型数据集时可能会消耗较多的内存。
3种方法,用Java找出两个List中的重复元素的更多相关文章
- Java - Collection 高效的找出两个List中的不同元素
如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ...
- Java Collection - 003 高效的找出两个List中的不同元素
如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ...
- 高效的找出两个List中的不同元素
/* * TestList.java * Version 1.0.0 * Created on 2017年12月15日 * Copyright ReYo.Cn */ package reyo.sdk. ...
- 【awk】找出两个文件中的不同值
https://blog.csdn.net/weixin_33534991/article/details/116683524 awk 'NR==FNR{a[$0]}NR>FNR{ if(!($ ...
- python——快速找出两个电子表中数据的差异
最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力. 公司里会有这样的场景:有一张电子表格的内容由两三个部门或者更多的部门用到,这些员工会在维护这些表格中不定期的 ...
- python:找出两个列表中相同和不同的元素(使用推导式)
#接口返回值 list1 = ['张三', '李四', '王五', '老二'] #数据库返回值 list2 = ['张三', '李四', '老二', '王七'] a = [x for x in lis ...
- java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。
import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...
- Java找出两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...
- 389. Find the Difference 找出两个字符串中多余的一个字符
[抄题]: Given two strings s and t which consist of only lowercase letters. String t is generated by ra ...
- 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项
1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号 工号 姓名 310110xxxx220130004 101 傅家宜3101 ...
随机推荐
- 2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N) 现给出K(
2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1& ...
- Mach-O Inside: 命令行工具集 otool objdump od 与 dwarfdump
1 otool otool 命令行工具用来查看 Mach-O 文件的结构. 1.1 查看文件头 otool -h -v 文件路径 -h选项表明查看 Mach-O 文件头. -v 选项表明将展示的内容进 ...
- JUC并发编程学习笔记(八)读写锁
读写锁 ReadWriteLock ReadWriteLock只存在一个实现类那就是ReentrantReadWriteLock,他可以对锁实现更加细粒化的控制 读的时候可以有多个阅读器线程同时参与, ...
- Kubernetes Gateway API 攻略:解锁集群流量服务新维度!
Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程.这其中包括一套更标准.更强大的 API资源,用于管理已暴露的服务.在这篇文章中,我将介绍 Gateway ...
- Python 潮流周刊#28:两种线程池、四种优化程序的方法
你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.本周刊开源,欢迎投稿.另有电报频道作为副刊,补充发布更加丰富的资讯. 产品推荐 Walles.AI 是一款适用于所 ...
- AutoCAD ObjectARX 二次开发(2020版)--2,手动创建CAD二次开发项目--
本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的"文件"下拉菜单中,选择"新建"->"项目...". 在出现 ...
- 月薪3w的报表工程师要会哪些技能?报表工程师的招聘要求解读
对于月薪3w的报表工程师,通常需要具备以下技能: 1. 数据分析与处理 - 数据仓库:了解数据仓库的设计原则和架构,能够构建和优化数据仓库结构. - SQL语言:熟练掌握SQL查询语言,能够编写复杂的 ...
- 一次elasticsearch 查询瞬间超时案例分析
大家好,我是蓝胖子,有段时间没有做性能分析案例讲解了,正好前两天碰到一个性能问题,今天就来对它探讨探讨. 问题背景 在晚上9点左右,刚从外面逛街回到家,就接到了电话报警(幸好前不久刚好把电话报警机制加 ...
- NCTF2022-Crypto WP
superecc 题目 from Crypto.Util.number import * from secrets import INF, flag assert flag[:5] == b'nctf ...
- 聊聊大数据框架的数据更新策略: COW,MOR,MOW
大数据框架下,常用的数据更新策略有三种: COW: copy-on-write, 写时复制; MOR: merge-on-read, 读时合并; MOW: merge-on-write, 写时合并; ...