Java 找到两个数组之间的共同元素

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()构造函数将它们转换为HashSet。然后我们使用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:使用流

  • 初始化两个数组并将它们转换为 哈希集合。

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

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

语法

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

在这里,set1和set2是两个具有元素的集合,使用stream()方法将集合转换为流,然后使用filter方法,使用“set2 :: contains”过滤掉两个集合中相同的元素,然后使用collect()方法收集所有相同的元素。

在这种方法中使用的方法

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

Arrays.stream(collection)

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

stream对象.filter(condition)

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

streamobject.collect()

示例

在这个示例中,我们初始化了两个数组,并通过使用Arrays.asList()方法和HashSet()构造函数将它们转换为哈希集。然后,我们使用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)

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程