我可以将数组的相等性与数组的ArrayList进行比较吗?

时间:2013-08-11 07:42:20

标签: java arrays arraylist

我有整数数组:

int[] arrA = {1,2,3,4,5,6,7,8,9};
int[] arrB1= {7,3,4,1,5,8,9,2,6};
int[] arrB2= {9,5,1,4,7,6,8,2,3};
int[] arrB3= {4,6,1,3,8,9,5,7,2};
int[] arrB4= {2,3,1,5,8,9,4,6,7};
int[] arrB5= {1,2,3,4,5,6,7,8,9};

并将所有arrB添加到列表中,如下所示:

List<int[]> list= new ArrayList<int[]>();

list.add(arrB1);
list.add(arrB2);
list.add(arrB3);
list.add(arrB4);
list.add(arrB5);

我希望比较数组arrA与数组列表的相等性,并使用此代码完成它:

boolean isEqual=false;
for(int index=0; index<list.size(); index++){
    if(list.get(index).equals(arrA)){
          isEqual=true;
    }
    System.out.println(isEqual);
}

我知道arrB5等于arrA,但为什么我总是假的?我正在进行比较吗?

3 个答案:

答案 0 :(得分:7)

你在数组上调用equals - 它只会通过 reference 进行比较,因为数组不会覆盖equals。您希望Arrays.equals(int[], int[])比较数组中的值。

(在这种情况下,当您处理deepEquals时,您不需要int[] - 实际上调用deepEquals无法编译,因为int[]不是不是Object[]。)

答案 1 :(得分:2)

来自ArrayUtils.isEquals()

Apache Commons就是这么做的。它还处理多维数组。

您还应该尝试Arrays.deepEquals(a, b)

答案 2 :(得分:0)

根据java.sun.com 类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。 它不会对大多数类执行智能比较,除非该类重写它。对于大多数Java核心类,它已经以有意义的方式定义。如果没有为(用户)类定义它,它的行为与==相同。 所以试试Arrays.equals(arrB5,arrA)。