比较java中的两个整数数组

时间:2013-02-15 14:58:25

标签: java arrays compare

我正在尝试编写代码来比较两个数组。在第一个数组中,我放置了自己的数字,但第二个数组从输入文件中获取数字。此数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为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;
            }
        }
    }       
}

10 个答案:

答案 0 :(得分:64)

从我看到你只是试着看看它们是否相等,如果这是真的,那就去做这样的事情:

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

这是执行此操作的标准方法。

Ops,从java doc开始,它必须对数组进行排序以使其被认为是相等的:

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

很抱歉错过了。

答案 1 :(得分:34)

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

修改
您可以使用Arrays.deepEquals(ary1,ary2)来比较 2D数组以及

还要检查this link,了解Arrays.equls(ar1,ar2)Arrays.deepEquals(ar1,ar2)

之间的比较比较

Java Arrays.equals() returns false for two dimensional arrays

编辑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;
}

答案 2 :(得分:19)

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);
    }

答案 3 :(得分:7)

如果你知道数组的大小相同,那么排序比较快,比较

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

如果您不想更改数组中数据的顺序,请先执行System.arraycopy

答案 4 :(得分:2)

现有的答案都没有涉及使用比较器,因此不能用于二叉树或排序。所以我要离开这里:

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;
}

答案 5 :(得分:1)

尽管有一些像.equals这样容易的东西,但我想指出你在代码中犯的两个错误。第一个:当您浏览数组时,您说btruefalse。然后你再次开始检查,因为for循环。但每次你给b一个值。因此,无论发生什么,值b设置为始终是LAST for循环的值。下次,设置boolean b = trueif equal = true,不执行任何操作,if equal = falseb=false

其次,您现在使用array1中的每个值检查array2中的每个值。如果我理解正确,您只需要检查数组中相同位置的值,这意味着您应该删除第二个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);

答案 6 :(得分:1)

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

答案 7 :(得分:1)

  

数组的长度必须相同,数字在整个数字中是相同的(数组中的第一个数字必须是sasme,依此类推)

根据此评论,您已经拥有算法:

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

    array1.length == array2.length

  2. 相同位置的数字必须相同:

    array1 [x] == array2 [x]

  3. 知道这一点,你可以像这样创建你的代码(这不是Java代码,它是一种算法):

    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,然后在另一个变量中恢复返回值并使用它来打印消息“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");
        }
    }
    

答案 8 :(得分:0)

这是我的方法,对其他人可能有用。

public static void compareArrays(int[] array1, int[] array2) {
    if (array1.length != array2.length)
    {
           System.out.println("Not Equal");
    }
    else
    {
        int temp = 0;
        for (int i = 0; i < array2.length; i++) {  //Take any one of the array size
            temp^ = array1[i] ^ array2[i];   //with help of xor operator to find two array are equal or not                 
        }
        if( temp == 0 )
        {
             System.out.println("Equal");
        }
        else{
             System.out.println("Not Equal");
        }
    }
}

答案 9 :(得分:-2)

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

    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;
    }