首页 > 解决方案 > 创建一个出现在两个给定数组java中的值数组

问题描述

我需要创建一个数组,其值出现在两个给定数组中。

我正在考虑遍历每个数组并比较值,如果它们匹配,则增加一个“计数器”变量,该变量将是新数组的长度,循环遍历新数组并将值分配给数组元素。

我需要找出一个带有循环的解决方案,下面的代码是我到目前为止所得到的

class New {
    public static void main(String[] args) {

        int arr1[] = {2, 4, 5, 7, 9, 10};
        int arr2[] = {1, 2, 5, 6, 8};

        int counter = 0;
        int combined[] = new int[counter];

        for (int s = 0; s < arr1.length; s++) {
            for (int x = 0; x < arr2.length; x++) {
                for (int i = 0; i < combined.length; i++) {
                    if (arr1[s] == arr2[x]) {
                        counter++;
                        combined[i] = arr1[s];
                    }

                }
            }
            for (int i = 0; i < combined.length; i++) {
                System.out.print(combined[i] + " ");
            }
        }
    }
}

标签: javaarraysalgorithmloopsfor-loop

解决方案


public static int[] intersection(int[] arr1, int[] arr2) {
    Set<Integer> elements = IntStream.of(arr1).boxed().collect(Collectors.toSet());
    return IntStream.of(arr2).filter(elements::contains).toArray();
}

或仅使用int[]

// create temporary array to not modify input data
int[] tmp = Arrays.copyOf(arr1, arr1.length);
Arrays.sort(tmp);

for(int v : arr2)
    if(Arrays.binarySearch(tmp, v) >= 0)
        System.out.print(v + " ");

推荐阅读