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 ...
随机推荐
- 可视化-vscode安装matplotlib工具
可视化工具中,最流行的工具之一是 Matplotlib,它是一个数学绘图库,可以制作简单的图表,如折线图和散点图: 使用pip可以安装Matplotlib: 安装步骤:: 1.在vscode的终端输入 ...
- 【v2v迁移】Xen2kvm 迁移-Windows篇
迁移环境: 源平台:华为FusionComputeV100R006C10SPC101 目标平台:基于KVM虚拟化的云平台,本文以原生的libvirt为例 虚拟机:Windows server 2012 ...
- 【matplotlib 实战】--散点图
散点图,又名点图.散布图.X-Y图,是将所有的数据以点的形式展现在平面直角坐标系上的统计图表. 散点图常被用于分析变量之间的相关性.如果两个变量的散点看上去都在一条直线附近波动,则称变量之间是线性相关 ...
- mysql5.5自定义函数-计算并赋值
mysql自定义函数的写法 特别注意,将全部的定义现在最前面,然后再写其他语句,因为之前将定义变量和赋值混着写,死活报错.最后一个前同事高手"邢哥"解决. DELIMITER $$ ...
- 14.11 Socket 基于时间加密通信
在之前的代码中我们并没有对套接字进行加密,在未加密状态下我们所有的通信内容都是明文传输的,这种方式在学习时可以使用但在真正的开发环境中必须要对数据包进行加密,此处笔者将演示一种基于时间的加密方法,该加 ...
- .then()方法的意思和用法
then()方法是异步执行. 意思是:就是当.then()前的方法执行完后再执行then()内部的程序,这样就避免了,数据没获取到等的问题. 语法:promise.then(onCompleted, ...
- 学习一下Java的ArrayList和contains函数和扩容机制
起因 在Leetcode上做题写了两种暴力解法,但是执行效率上不太一样. 时间上差很远,内存虽然差不多但是前者击败30%,后者击败94%.这两种解法区别是用一条ArrayList还是两条来存数据,所以 ...
- 我整理了一份Flink流计算入门教程清单(转)
好久不见! 作为技术出身的我,不太会写软文广告,今天就直接来个硬广.之前与人民邮电出版社合作的<Flink原理与实践>经过一年多时间的打磨和润色,这两天终于与大家见面了,恳请各位朋友多多支 ...
- ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级
ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级 1.ChatGLM3简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型.Chat ...
- DP:使用最小花费爬楼梯
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始). 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯. 您需 ...