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)
因此,在本文中,我们讨论了查找数组中公共元素的不同方法。