在Java中比较两个整数数组

我正在尝试编写代码来比较两个数组。 在第一个数组中,我把我自己的数字,但第二个数组从数据input文件。 该数组的大小由文件中的第一个数字确定,而第一个数组始终是大小10.两个数组的长度必须相同,数字也一样。 我的代码如下:

public static void compareArrays(int[] array1, int[] array2) { boolean b = false; for (int i = 0; i < array2.length; i++) { for (int a = 0; a < array1.length; a++) { if (array2[i] == array1[a]) { b = true; System.out.println("true"); } else { b = false; System.out.println("False"); break; } } } } 
 public static void compareArrays(int[] array1, int[] array2) { boolean b = true; if (array1 != null && array2 != null){ if (array1.length != array2.length) b = false; else for (int i = 0; i < array2.length; i++) { if (array2[i] != array1[i]) { b = false; } } }else{ b = false; } System.out.println(b); } 

从我看到的只是试图看看它们是否平等,如果这是真的,那就去看看这样的事情吧:

 boolean areEqual = Arrays.equals(arr1, arr2); 

这是做这件事的标准方式。

操作系统,它接缝的数组必须也被认为是平等的,从Java文档:

“如果两个数组包含相同数量的元素,则两个数组被认为是相等的,并且两个数组中所有对应的元素对都是相等的。换句话说,如果两个数组以相同的顺序包含相同的元素,

对不起,错过了。

使用
Arrays.equals(ary1,ary2); //返回布尔值

编辑
你可以使用Arrays.deepEquals(ary1,ary2)来比较二维数组

也检查这个链接比较Arrays.equls(ar1,ar2)Arrays.deepEquals(ar1,ar2)

对于二维数组,Java Arrays.equals()返回false

编辑2
如果你不想使用这些库方法,那么你可以很容易地实现你的方法是这样的:

 public static boolean ArrayCompare(int[] a, int[] a2) { if (a==a2) // checks for same array reference return true; if (a==null || a2==null) // checks for null arrays return false; int length = a.length; if (a2.length != length) // arrays should be of equal length return false; for (int i=0; i<length; i++) // compare array values if (a[i] != a2[i]) return false; return true; } 

如果您知道数组的大小相同,则sorting和比较的速度可能会更快

 Arrays.sort(array1) Arrays.sort(array2) return Arrays.equals(array1, array2) 

如果你不想改变数组中数据的顺序,那么先做一个System.arraycopy

您可以使用Apache Commons ArrayUtils#isEquals()方法检查数组是否相等。

即使有像.equals这样简单的东西,我想指出你在代码中犯的两个错误。 第一:当你通过数组,你说btruefalse 。 然后你再次开始检查,因为for循环。 但是每次你给一个价值。 所以,无论发生什么情况,值b被设置为总是最后一个for循环的值。 下一次,设置boolean b = trueif equal = true ,则不做任何事, if equal = false ,则b=false

其次,你现在用array2每个值检查array1中的每个值。 如果我理解正确,你只需要检查数组中的相同位置的值,这意味着你应该删除第二个for循环,并像这样检查: if (array2[i] == array1[i]) 。 那么你的代码也应该运行。

你的代码会像这样工作:

 public static void compareArrays(int[] array1, int[] array2) { boolean b = true; for (int i = 0; i < array2.length; i++) { if (array2[i] == array1[i]) { System.out.println("true"); } else { b = false; System.out.println("False"); } } return b; 

}

但正如其他人所说,更容易的是:Arrays.equals(ary1,ary2);

数组的长度必须相同,整个数字才是相同的(数组中的第一个数字必须是sasme等等)

基于这个评论,那么你已经有了你的algorithm:

  1. 检查两个数组是否具有相同的长度:

    array1.length == array2.length

  2. 这些数字在同一位置必须相同:

    array1 [x] == array2 [x]

知道这一点,你可以像这样创build你的代码(这不是Java代码,它是一个algorithm):

 function compareArrays(int[] array1, int[] array2) { if (array1 == null) return false if (array2 == null) return false if array1.length != array2.length then return false for i <- 0 to array1.length - 1 if array1[i] != array2[i] return false return true } 

注意:你的函数应该返回一个boolean ,而不是一个void ,然后恢复另一个variables的返回值,并用它来打印“true”或“false”消息:

 public static void main(String[] args) { int[] array1; int[] array2; //initialize the arrays... //fill the arrays with items... //call the compare function boolean arrayEquality = compareArrays(array1, array2); if (arrayEquality) { System.out.println("arrays are equals"); } else { System.out.println("arrays are not equals"); } } 

现有的答案都不涉及使用比较器,因此不能用于二叉树或sorting。 所以我只是想把这个留在这里:

 public static int compareIntArrays(int[] a, int[] b) { if (a == null) { return b == null ? 0 : -1; } if (b == null) { return 1; } int cmp = a.length - b.length; if (cmp != 0) { return cmp; } for (int i = 0; i < a.length; i++) { cmp = Integer.compare(a[i], b[i]); if (cmp != 0) { return cmp; } } return 0; } 

为了完整起见,你应该有一个可以检查所有数组的方法:

  public static <E> boolean compareArrays(E[] array1, E[] array2) { boolean b = true; for (int i = 0; i < array2.length; i++) { if (array2[i].equals(array1[i]) ) {// For String Compare System.out.println("true"); } else { b = false; System.out.println("False"); } } return b; }