Java程序查找两个数组的公共元素


我们可以使用Java中的不同方法来查找两个数组之间的公共元素。我们将讨论这些方法,包括涉及的基本步骤,并提供实现目标所需的必要代码。无论您是Java编程初学者还是经验丰富的程序员,本文都将为您提供解决此常见编程问题所需的工具和知识。在本文中,我们将学习查找两个数组之间公共元素的不同方法。

两个数组之间公共元素的示例

示例1

Input:  array1 = {4, 2, 3, 1, 6}
array2 = {6, 7, 9, 8, 4}
Output: Common Elements: {2, 6}

在上面的示例中,由于数组array1和array2都包含公共元素2和6。因此,上述示例的输出数组为{2, 6}。

示例2

Input:  array1 = {"Java", "JavaScript", "C", "C++" }
array2 = {"Python", "C#", "Java", "C++" }
Output: Common Elements : {"Java", "C++"} 

在上面的示例中,由于数组array1和array2都包含公共元素“Java”和“C++”。因此,上述示例的输出数组为{“Java”, “C++”}。

在本文中,我们将讨论使用Java程序查找两个数组之间公共元素的不同方法。

方法1:使用for循环

  • 考虑两个数组array1和array2并初始化它们。

  • 声明一个ArrayList来存储公共元素。

  • 使用for循环遍历第一个数组,从数组中取出一个元素,然后使用另一个循环遍历第二个数组以查找相同的元素。如果找到相同的元素,则将其存储在arraylist中并中断内部循环,然后继续下一个元素。

  • 使用Arraylist打印元素。

示例

在此示例中,我们初始化了两个各有5个元素的数组。然后,我们声明一个Arraylist来存储公共元素,然后我们使用两个for循环,每个循环分别迭代两个数组。如果我们使用找到一个commonElement,则我们将该元素添加到arraylist中并添加元素并中断内部循环。最后,我们打印commonElements ArrayList。

import java.util.*; 
public class Main {
   public static void main(String[] args) {
      int[] array1 = {4, 2, 3, 1, 6};
      int[] array2 = {6, 7, 9, 8, 4};
      List<Integer> commonElements = new ArrayList<>();
      for (int i = 0; i < array1.length; i++) {
         for (int j = 0; j < array2.length; j++) {
            if (array1[i] == array2[j]) {
               commonElements.add(array1[i]);
               break;
            }
         }
      }
      System.out.println("Common Elements: " + commonElements);
   }
}

输出

Common Elements: [4, 6]

时间复杂度:O(N^2) 辅助空间:O(1)

方法2:使用Array.asList()和retainAll()方法

  • 考虑两个数组,并使用Arrays.asList(arrayName)将它们转换为列表。

  • 使用retainAll()方法保留一个列表中存在于另一个列表中的元素,并打印这些元素。

语法

collection1.retainAll(collection2)

这里collection1和collection2是两个集合对象,例如列表、集合、HashSet等。

此方法用于在一个集合中保留另一个集合的所有元素。

示例

在此示例中,我们初始化了两个数组,并使用Arrays.asList()方法将它们转换为ArrayLists。然后,我们使用retainAll()方法查找两个数组之间的公共元素。

import java.util.ArrayList;
import java.util.Arrays;
public class Main {
   public static void main(String[] args) {
      Integer[] array1 = {4, 2, 7, 1, 6};
      Integer[] array2 = {6, 7, 9, 8, 4};
      ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(array1));
      ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(array2));
      list1.retainAll(list2);
      System.out.println("Common Elements: " + list1);
   }
}

输出

Common Elements: [4, 7, 6]

时间复杂度:O(N) 辅助空间:O(N)

方法3.使用Hashset和retainAll()方法

  • 初始化两个数组并将它们转换为hashset。

  • 使用retainAll()方法保留一个列表中存在于另一个列表中的元素,并打印这些元素。

示例

在此示例中,我们初始化了两个数组,然后使用Arrays.asList()方法和HashSet()构造函数将它们转换为HashSets。然后,我们使用retainAll()方法查找两个数组之间的公共元素。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Main {
   public static void main(String[] args) {
      Integer[] array1 = {4, 2, 7, 1, 6};
      Integer[] array2 = {6, 7, 9, 8, 4};
      Set<Integer> set1 = new HashSet<>(Arrays.asList(array1));
      Set<Integer> set2 = new HashSet<>(Arrays.asList(array2));
      set1.retainAll(set2);
      System.out.println("Common Elements: " + set1);
   }
}

输出

Common Elements: [4, 6, 7]

时间复杂度:O(N) 辅助空间:O(N)

方法4:使用流

  • 初始化两个数组并将它们转换为hashset。

  • 将set1转换为流,并使用filter()方法在set1中查找set2的元素。

  • 使用collect()方法将元素转换为集合并打印它们。

语法

set1.stream()
   .filter(set2::contains)
   .collect(Collectors.toSet());

这里set1和set2是两个包含元素的集合,stream()方法用于将集合转换为流,然后我们使用filter方法并使用'set2 :: contains'过滤掉两个集合中通用的元素,然后我们使用collect()方法收集所有通用元素。

此方法中使用的方法

stream() - 此方法用于创建元素流,以便我们可以使用filter()、map()、reduce()等方法来处理数据。

Arrays.stream(collection)

filter() - 此方法用于从流中过滤数据,即根据条件从流中选择特定元素。它返回布尔值。

streamobject.filter(condition)

collect() - 此方法用于将元素流转换为集合,例如数组、集合。

streamobject.collect()

示例

在此示例中,我们初始化了两个数组,并使用Arrays.asList()方法和HashSet()构造函数将它们转换为Hash Sets。然后,我们使用stream()方法将set1转换为流,然后我们使用filter方法并使用'set2 :: contains'过滤掉两个集合中通用的元素。然后,我们使用collect()方法收集所有通用元素并打印两个集合中的通用元素。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
   public static void main(String[] args) {
      Integer[] array1 = {4, 2, 7, 1, 6};
      Integer[] array2 = {6, 7, 9, 8, 4};
      Set<Integer> set1 = new HashSet<>(Arrays.asList(array1));
      Set<Integer> set2 = new HashSet<>(Arrays.asList(array2));
      Set<Integer> commonelements = set1.stream()
      .filter(set2::contains)
      .collect(Collectors.toSet());
      System.out.println("Common Elements: " + commonelements);
   }
}

输出

Common Elements: [4, 6, 7]

时间复杂度:O(N) 辅助空间:O(N)

因此,在本文中,我们讨论了查找数组中公共元素的不同方法。

更新于:2024年5月31日

9K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

立即开始
广告