本文分享自华为云社区《如何用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中的重复元素的更多相关文章

  1. Java - Collection 高效的找出两个List中的不同元素

    如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ...

  2. Java Collection - 003 高效的找出两个List中的不同元素

    如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ...

  3. 高效的找出两个List中的不同元素

    /* * TestList.java * Version 1.0.0 * Created on 2017年12月15日 * Copyright ReYo.Cn */ package reyo.sdk. ...

  4. 【awk】找出两个文件中的不同值

    https://blog.csdn.net/weixin_33534991/article/details/116683524 awk 'NR==FNR{a[$0]}NR>FNR{ if(!($ ...

  5. python——快速找出两个电子表中数据的差异

    最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力. 公司里会有这样的场景:有一张电子表格的内容由两三个部门或者更多的部门用到,这些员工会在维护这些表格中不定期的 ...

  6. python:找出两个列表中相同和不同的元素(使用推导式)

    #接口返回值 list1 = ['张三', '李四', '王五', '老二'] #数据库返回值 list2 = ['张三', '李四', '老二', '王七'] a = [x for x in lis ...

  7. java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。

    import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...

  8. Java找出两个链表的第一个公共节点

    题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...

  9. 389. Find the Difference 找出两个字符串中多余的一个字符

    [抄题]: Given two strings s and t which consist of only lowercase letters. String t is generated by ra ...

  10. 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项

    1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号                           工号  姓名 310110xxxx220130004 101 傅家宜3101 ...

随机推荐

  1. GeoServer发布影像WMTS服务

    WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案. WMTS: 切片地图web服务(OpenGIS Web Map Tile Service) 使用GeoServer发布WMTS服 ...

  2. Solr Shiro Log4j2 命令执行--文件读取--反序列化--身份权限绕过--命令执行

    Solr Shiro Log4j2 命令执行--文件读取--反序列化--身份权限绕过--命令执行 solr 远程命令执行 (CVE-2019-17558) 漏洞简介 Apache Velocity是一 ...

  3. 基于Python语言的KNN算法

    import operator import numpy as np # 鸢尾花的数据集 load_iris from sklearn.datasets import load_iris ''' 对测 ...

  4. 麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo

    前言   在国产麒麟系统上实现C++三维仿真,使用OSG技术,其他基于web的技术也是可以但是交互上鼠标拽托等交互相对差一些,所以这块需要斟酌选择到底是何种技术来取舍.  本篇在厂家指定的麒麟系统上编 ...

  5. MyBatis拦截器优雅实现数据脱敏

    背景 现代网络环境中,敏感数据的处理是至关重要的.敏感数据包括个人身份信息.银行账号.手机号码等,泄露这些数据可能导致用户隐私泄露.财产损失等严重后果.因此,对敏感数据进行脱敏处理是一种必要的安全措施 ...

  6. 慎用:git reset --hard

    丧心病狂的命令:git reset --hard commit ,我以后没弄懂这个命令之前,再也不碰它了,背后凉嗖嗖的,谁敢啊. 事情的原由是我本地git commit 的时候,发现文件多了,想删掉本 ...

  7. 🔥🔥你以为你了解TCP协议?这些你可能不知道的细节才是关键!

    引言 在之前的内容中,我们已经详细讲解了TCP面试中最常见的问题,如三次握手和四次挥手等.而今天,我们将继续深入探讨TCP协议的其他方面,比如序列号和TCP Fast Open(TFO)等重要细节问题 ...

  8. JVM指令分析

    代码: 1 public class AppGo{ 2 public static void test() { 3 boolean flag = true; 4 if (flag) System.ou ...

  9. CDQ分治(初步入门)

    CDQ分治 CDQ分治,传说中是一个神犇创造的算法. 在了解这种算法之前,我们有必要了解一下一种基本的思想:分治. 分治介绍 分而治之,将原问题不断划分成若干个子问题,直到子问题规模小到足以直接解决 ...

  10. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-34-处理https 安全问题或者非信任站点-下篇

    1.简介 这一篇宏哥主要介绍playwright如何在IE.Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续 ...