首页 > 编程语言 >如何用Java找出两个List中的重复元素,读这一篇就够了

如何用Java找出两个List中的重复元素,读这一篇就够了

时间:2023-10-24 15:23:53浏览次数:35  
标签:找出 Java 重复 list1 元素 List 就够 list2

 

在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,方便进一步处理。但需要注意的是,结果中的元素顺序可能会发生变化。开发者可根据实际的需求,通过设置入参、出参,调整需求的方式,来优化生成的代码。免费下载使用链接:https://suo.im/7RxEZ

 

方法二:使用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);
    }
}

这种方法可以保留元素的原始顺序,但在处理大型数据集时可能会消耗较多的内存。

标签:找出,Java,重复,list1,元素,List,就够,list2
From: https://www.cnblogs.com/feisuanyz/p/17784876.html

相关文章

  • [VM] The JavaScript Virtual Machine
    TableofContentIntroudctiontoVMsCPU-UnderstandingthePysicalMachineVMs-Arrays,Objects,functions,prototypechainsDepotExplorer:collectingdatafromtheVMDeopt:CallingCoventions&InliningMegamohpism&InlineCache:Objectpro......
  • Java ConcurrentModificationException异常原因和解决方法
    JavaConcurrentModificationException异常原因和解决方法JavaConcurrentModificationException异常原因和解决方法在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。下面我们就来讨论以......
  • 支付宝沙箱超详细教程+避雷经验,看这篇就够了
    使用支付宝沙箱的时候经常踩坑TAT自己排查问题还要花好长时间。今天总结了一下支付宝沙箱的使用教程,希望帮助到大家,避免重复踩坑~ψ(*`ー´)ψ我们先看下官方对沙箱的说明,如下:  我们可以看到官方文档上说明的指出了沙箱的三个特性使用账号不需要任何的资质账号不需要......
  • java动态创建es 及mapping
    publicCreateIndexResponsecreateIndexWithMapping(Stringindex,Map<String,String>mapping){CreateIndexResponseresponse=null;try{CreateIndexRequestrequest=newCreateIndexRequest(index);request.settings(Settings.b......
  • Java中的NumberFormatException异常常见原因是什么?
    Java中的NumberFormatException异常常见原因是什么?Java中的NumberFormatException是一种常见的异常,它通常在字符串转换成数值类型时发生。本文将探讨NumberFormatException异常的原因及解决方法。引起NumberFormatException异常的原因:字符串转换成数值类型时格式错误。例如,对于......
  • Linux配置java和maven环境变量
    修改/etc/profile文件,新增如下代码exportJAVA_HOME=/usr/local/btjdk/jdk8exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$PATH:$JAVA_HOME/binexportM2_HOME=/usr/local/maven/apache-maven-3.9.4exportPATH=$PATH:$M2_HOME/bin刷新/etc/prof......
  • JavaScript在发送AJAX请求时,URL的域名地址是使用绝对地址还是相对地址?
    在使用JavaScript发送AJAX请求时,URL的域名地址通常是使用相对地址。相对地址指的是相对于当前页面的URL来确定请求的目标地址。当请求发送到服务器时,浏览器会自动将相对地址转换为完整的绝对URL。这样做的好处是能够更灵活地处理不同环境下的URL路径,同时减少了在JavaScript代码中......
  • Java List 排序的2种方法
    1. 利用Collections类的java.util.Collections.sort(java.util.List,java.util.Comparator)方法,自定义比较器对象对指定对象进行排序对学生对象按照其分数(降序)进行排序,当分数相同时按学号(从小到大)排序,代码如下:Student类classStudent{ privateintid; privateStringname......
  • Java HashMap类
    HashMap是我们使用非常多的Collection,它是基于哈希表的Map接口的实现,以key-value的形式存在。HashMap实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该......
  • Java中Servlet Filter配置(web.xml详解)
    Java中ServletFilter在web.xml中配置时有2个用于过滤器的元素,分别是filter和filter-mapping。filter元素向系统注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL。Filter配置过滤器元素filter元素filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、serv......