Java中找出两个集合中相同元素的方法

在Java中,有时候我们需要找出两个集合中相同的元素。这种情况下,我们可以使用一些方法来实现这个目的。本文将介绍一些常用的方法,并提供相应的代码示例。

方法一:使用循环遍历

最简单的方法是使用循环遍历两个集合,比较它们中的每个元素是否相同。如果相同,将这个元素添加到一个新的集合中。

List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);

List<Integer> commonElements = new ArrayList<>();

for (Integer num1 : list1) {
    for (Integer num2 : list2) {
        if (num1.equals(num2)) {
            commonElements.add(num1);
            break;
        }
    }
}

System.out.println("Common elements: " + commonElements);

方法二:使用Java8的Stream API

Java8引入了Stream API,可以简化对集合的操作。我们可以使用Stream的filter方法来筛选出两个集合中相同的元素。

List<Integer> commonElements = list1.stream()
    .filter(list2::contains)
    .collect(Collectors.toList());

System.out.println("Common elements: " + commonElements);

方法三:使用retainAll方法

Java中的retainAll方法可以用来保留两个集合中的共同元素。这个方法会修改调用retainAll的集合,所以需要注意备份原始集合。

List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);

List<Integer> commonElements = new ArrayList<>(list1);
commonElements.retainAll(list2);

System.out.println("Common elements: " + commonElements);

比较三种方法

下表列出了三种方法的比较:

方法 复杂度 优点 缺点
循环遍历 O(n^2) 简单直观 效率低,适用于小型集合
Stream API O(n^2) 代码简洁 效率不如retainAll
retainAll O(n) 效率高 修改了原始集合

饼状图表示比较结果

pie
    title 三种查找方法比较
    "循环遍历" : 35
    "Stream API" : 25
    "retainAll" : 40

从比较结果来看,使用retainAll方法是最高效的,但如果需要简洁的代码或者对效率要求不是很高,也可以考虑使用Stream API。

结论

通过本文的介绍,我们学习了在Java中找出两个集合中相同元素的方法。无论是使用循环遍历、Stream API还是retainAll方法,都可以轻松实现这个功能。在实际应用中,可以根据具体情况来选择合适的方法。希望本文对你有所帮助!