如何找到两个整数数组之间的差异?

时间:2017-07-31 15:04:26

标签: java arraylist

我正在尝试编写一个返回两个数组之间差异的函数。 输入数组未排序。我假设输入数组中的所有元素都是唯一的。 例如:

输入:arr1 = [1,2,3,5,4]         arr2 = [1,2,3]

预期输出:[4,5]

我正在尝试使用arraylist实现它,但无法找到我的代码的问题。 这是:

public class Difference{
ArrayList<Integer> diff(int m[],int n[])
    {
        int mlen = m.length;
        int nlen = n.length;
        ArrayList<Integer> arr1 = new ArrayList<Integer>(Arrays.asList(m));
        ArrayList<Integer> arr2 = new ArrayList<Integer>(Arrays.asList(n));
        if(mlen>nlen)
        {
            arr1.removeAll(arr2);
            return arr1;
        }
        else
        {
            arr2.removeAll(arr1);
            return arr2;
        }

    }
    public static void main(String args[])
    {
          Difference obj = new Difference();
          int a[] = {1,2,3,4,5};
          int b[] = {1,2,3};
          System.out.println(obj.diff(a,b));
    }
}

4 个答案:

答案 0 :(得分:2)

您的代码的问题在于您尝试使用ArrayList(int[] numbers)的不存在的构造函数您必须将mn中的每个数字添加到{{1}或者使用双括号初始化例如

ArrayList

在一行中,它看起来像没有格式化

ArrayList < Integer > arr1 = new ArrayList < Integer > () { { for (int i: m) add(i); } } ArrayList < Integer > arr2 = new ArrayList < Integer > () { { for (int i: n) add(i); } }

另一种首选方式是在迭代时添加每个数字,例如

new ArrayList<Integer>() {{for(int i:m) add(i);}};

答案 1 :(得分:0)

您的代码是否已编译?

正如其他人建议的那样,您的ArrayList是Integer类型,而不是int类型。 这是一个编辑:

public static void main(String args[])
{
      Difference obj = new Difference();
      int a[] = {1,2,3,4,5};
      int b[] = {1,2,3};
      Integer[] anew = Arrays.stream(a).boxed().toArray( Integer[]::new );
      Integer[] bnew = Arrays.stream(b).boxed().toArray( Integer[]::new );
      System.out.println(obj.diff(anew,bnew));
}

最后,如果您确实使用了这个,请记住将diff的参数更改为Integer类型。

答案 2 :(得分:0)

最简单的解决方案是通过jQuery

function array_diff(array1, array2){
  var diff = $(array1).not(array2).get();
  return diff;
}

console.log(array_diff([1,2,3,4,5,6], [1,2,3,4]));

答案 3 :(得分:0)

如果有人最终在这个问题中寻找标题中问题的答案。这是一种方法:

int a[] = {1,2,3,4,5};
int b[] = {1,2,3,6};

int[] uniqueEntries = IntStream.concat(IntStream.of(a), IntStream.of(b))
    .filter(x -> !IntStream.of(a).anyMatch(y -> y == x) || !IntStream.of(b).anyMatch(z -> z == x))
    .toArray();

System.out.println(Arrays.toString(uniqueEntries));