当前位置: 首页 > 图灵资讯 > 技术篇> 如何用Java找出两个List中的重复元素,读这一篇就够了

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

来源:图灵教育
时间:2023-10-24 16:07:10

在Java编程中,我们经常需要找到两个列表(List)重复元素。在本文中,我们将讨论三种实现这一目标的方法。

方法1:HashsetJava中的Hashset是一个不允许重复元素的集合。我们可以利用这一特性,通过合并两个列表并计算差异集来找出重复元素。

以下是使用Hashset数据结构找出两个List中重复元素的代码示例。

// 函数名: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的元素遍历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软件机器人推出的FuncGPT(汇函数)生成的,转出AI生成Java函数。通过输入简单的指令“找出两个List中的重复元素”,上述代码在几秒钟内生成。FuncGPT使用Hashset数据结构的方法具有简单高效的优点。此外,它还返回了包含所有重复元素的List,便于进一步处理。但需要注意的是,结果中的元素顺序可能会发生变化。开发人员可以根据实际需要优化生成的代码,设置入参和出参,调整需求。

方法二:使用Streamm APIJava Streamm引入了Stream API,使我们能够更简洁地处理集合。我们可以使用Stream API的distinct()过滤掉重复元素,然后通过filter()找出两个list中的重复元素。

以下是Stream的使用 API找出两个List中重复元素的代码示例。

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);        // 将列表转换为Streamm        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中找到重复元素的代码示例。

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);        // 将列表转换为Hashmapp        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);    }}

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