写点什么

3 种方法,用 Java 找出两个 List 中的重复元素

  • 2023-10-25
    广东
  • 本文字数:2247 字

    阅读完需:约 7 分钟

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); }}
复制代码


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


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
3种方法,用Java找出两个List中的重复元素_Java_华为云开发者联盟_InfoQ写作社区