我正在尝试编写一个返回两个数组之间差异的函数。 输入数组未排序。我假设输入数组中的所有元素都是唯一的。 例如:
输入: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));
}
}
答案 0 :(得分:2)
您的代码的问题在于您尝试使用ArrayList(int[] numbers)
的不存在的构造函数您必须将m
和n
中的每个数字添加到{{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));