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