【问题标题】:Comparing arrays and comparing each element in both arrays比较数组并比较两个数组中的每个元素
【发布时间】:2012-06-21 14:44:37
【问题描述】:

我是 Java 新手。请帮帮我。

我想比较 Array 对象以及两个数组中的每个元素。那么我应该使用什么来检查它们是否相同:equalsdeepEqualscompareTo

【问题讨论】:

  • 欢迎您!到目前为止,您尝试过什么?
  • 您是在数组中存储复杂的对象吗?

标签: java arrays object


【解决方案1】:

我不确定我是否理解您的问题,但也许这会对您有所帮助。

Arrays.equals(array1, array2)int[10] 等一维数组一起使用。 Arrays.deepEquals(array1,array2) 用于一维或多维数组,例如 int[2][4]。根据您要比较的数组的维数选择一种。

编辑

您的评论代码无法编译,但我开始了解您的问题。您需要知道数组是对象,默认情况下在equals(Object obj) 方法中它们返回this == obj。这意味着它们不会通过存储在其中的值来比较数组,而只会检查来自其他对象obj(其他数组)的引用是否包含对您正在比较的同一数组的引用(this)。

你可以这样检查

Integer[] a1=new Integer[2];
Integer[] a2=new Integer[2];
for (int i=0; i<2; i++){
    a1[i]=i;
    a2[i]=a1[i];
}
System.out.println(a1.equals(a2));//false

但是当我将i2 的引用从i1 更改为点数组时,equals 将返回true

a2=a1;//now my i2 reference points array from i1
System.out.println(a1.equals(a2));//true

要比较数组中的元素,您需要遍历数组。您可以编写自己的代码来执行此操作,也可以使用现成的方法为您执行此操作。 Java 在 java.util.Arrays 类中提供了这样的方法,但没有人阻止你使用其他库,如 Apache Commons -> ArrayUtils 类。

【讨论】:

    【解决方案2】:

    正如 api 所说,ArrayUtils.equals 进行了浅层比较。 Arrays/ArrayUtils.deepEquals 进行深度比较...

    【讨论】:

    • OP 没有提到使用 Apache Commons 库。
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2016-06-19
    • 1970-01-01
    • 2021-05-06
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多