Java程序查找两个数组之间的共同元素

时间:2020-01-09 10:35:27  来源:igfitidea点击:

在这篇文章中,我们将看到一个Java程序来查找两个数组之间的公共元素。在编写此程序时,可能会要求我们不要使用任何内置的Java方法,在这种情况下,我们可以使用for循环迭代数组并列出公共元素。
如果允许使用任何内置方法,则可以使用Java中Set的keepAll()方法来获取两个数组之间的公共元素。

查找两个数组之间的共同元素–迭代

在此解决方案中,我们可以在外循环中迭代一个数组,并使用内循环将每个元素与另一个数组的所有元素进行比较。

public class CommonElement {
  public static void main(String[] args) {
    int[] arr1 = {3, 10, 1, 0, 9};
    int[] arr2 = {32, 5, 10, 6, 9, 1};
    for(int i = 0; i < arr1.length; i++){
      for(int j = 0; j < arr2.length; j++){
        if(arr1[i] == arr2[j]){
          System.out.print(arr1[i] + " ");
          break;
        }
      }
    }
  }
}

输出:

10 1 9

查找两个排序数组之间的公共元素

上面的解决方案是O(N2),如果可以对数组进行排序,则可以将时间减少到O(2NLogN + N)。
对数组进行排序后,可以在while循环中比较数组的元素,如果元素不相等,则仅递增数组索引中的一个,否则在两个数组中递增索引。

public class CommonElement {
  public static void main(String[] args) {
    int[] arr1 = {6, 8, 1, 0, 9};
    int[] arr2 = {34, 2, 1, 9, 12, 67, 0};
    findCommonElement(arr1, arr2);
  }
  public static void findCommonElement(int[] arr1, int[] arr2){
    // sort arrays
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    int lengthArr1 = arr1.length;
    int lengthArr2 = arr2.length;
    int i = 0, j = 0;
    while(i < lengthArr1 && j < lengthArr2){
      // compare and increment
      if(arr1[i] > arr2[j]){
        j++;
      }else if (arr2[j] > arr1[i]){
        i++;
      }else{
        //Print common element
        System.out.print(arr1[i] + " ");
        i++;
        j++;
      }
    }
  }
}

输出:

0 1 9

使用HashSet查找两个数组之间的公共元素

我们还可以使用HashSet的keepAll()方法来查找两个数组之间的公共元素。
keepAll()方法仅保留Set中包含在传递的Collection中的那些元素。

public class CommonElement {

	public static void main(String[] args) {
		int[] arr1 = {3, 10, 1, 0, 9};
		int[] arr2 = {32, 5, 10, 6, 9, 1};
		findCommonElement(arr1, arr2);
	}
	public static void findCommonElement(int[] arr1, int[] arr2){
		Set<Integer> set1 = new HashSet<>();
		Set<Integer> set2 = new HashSet<>();
		// adding elements from array1
		for(int i : arr1){
			set1.add(i);
		}
		// adding elements from array2
		for(int i : arr2){
			set2.add(i);
		}
		set1.retainAll(set2);
		System.out.println("Common elements- " + set1);
	}
}

输出:

Common elements- [1, 9, 10]