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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

方法二:使用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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

方法三:使用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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

比较三种方法

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

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

饼状图表示比较结果

三种查找方法比较 35% 25% 40% 三种查找方法比较 循环遍历 Stream API retainAll

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

结论

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