Java中两个整数数组的比较

Java中两个整数数组的比较,java,arrays,compare,Java,Arrays,Compare,我试图编写代码来比较两个数组。在第一个数组中,我放置了自己的数字,但第二个数组从输入文件中获取数字。此数组的大小由文件中的第一个数字决定,而第一个数组的大小始终为10。两个数组的长度以及数字必须相同 我的代码如下: public static void compareArrays(int[] array1, int[] array2) { boolean b = false; for (int i = 0; i < array2.length; i++) {

我试图编写代码来比较两个数组。在第一个数组中,我放置了自己的数字,但第二个数组从输入文件中获取数字。此数组的大小由文件中的第一个数字决定,而第一个数组的大小始终为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;
            }
        }
    }       
}
publicstaticvoidcomparararrays(int[]array1,int[]array2){
布尔b=假;
for(int i=0;i
尽管有一些简单的东西,比如
.equals
,但我想指出您在代码中犯的两个错误。第一:当你遍历数组时,你说
b
true
还是
false
。然后,由于for循环,再次开始检查。但是每次你给
b
一个值。因此,无论发生什么情况,设置为的值
b
始终是最后一个for循环的值。下次,设置
布尔值b=true
如果等于true
,则不执行任何操作,
如果等于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;
boolean areEqual = Arrays.equals(arr1, arr2);
publicstaticvoidcomparararrays(int[]array1,int[]array2){
布尔b=真;
for(int i=0;i
}


但正如其他人所说,更简单的是:array.equals(ary1,ary2)

如果您知道数组的大小相同,那么可以证明排序和比较的速度更快

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

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

从我看到的情况来看,您只需尝试查看它们是否相等,如果这是
true
,请执行以下操作:

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;
boolean areEqual = Arrays.equals(arr1, arr2);
这是做这件事的标准方法

请注意,从JavaDoc:

如果两个数组包含相同的数字,则认为两个数组相等 以及两个数组中所有对应的元素对 他们是平等的。换句话说,如果两个数组包含 相同的元素以相同的顺序排列


很抱歉遗漏了这一点。

使用
数组.equals(ary1,ary2)//返回布尔值

编辑
您也可以使用
Arrays.deepEquals(ary1,ary2)
来比较2D数组

还要检查
数组.equals(ar1,ar2)
数组.deepEquals(ar1,ar2)

编辑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;
}
公共静态布尔数组比较(int[]a,int[]a2){
if(a==a2)//检查相同的数组引用
返回true;
if(a==null | | a2==null)//检查null数组
返回false;
int length=a.length;
if(a2.length!=length)//数组的长度应该相等
返回false;

对于(int i=0;i您可以使用Apache Commons方法检查数组相等性。

公共静态无效比较数组(int[]array1,int[]array2){
布尔b=真;
if(array1!=null&&array2!=null){
if(array1.length!=array2.length)
b=假;
其他的
for(int i=0;i
数组的长度必须相同,且数字始终相同(数组中的第一个数字必须是sasme,以此类推)

基于此评论,您已经有了自己的算法:

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
}
  • 检查两个阵列是否具有相同的长度:

    array1.length==array2.length

  • 同一位置的编号必须相同:

    阵列1[x]==array2[x]

  • 知道了这一点,您可以像这样创建代码(这不是Java代码,而是一种算法):


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

    公共静态布尔比较数组(E[]array1,E[]array2){
    布尔b=真;
    for(int i=0;i
    现有的答案中没有一个涉及使用比较器,因此不能用于二叉树或排序。因此,我将把这个留在这里:

    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;
    }
    
    公共静态整数比较数组(int[]a,int[]b){
    如果(a==null){
    返回b==null?0:-1;
    }
    如果(b==null){
    返回1;
    }
    int cmp=a.长度-b.长度;
    如果(cmp!=0){
    返回cmp;
    }
    for(int i=0;ipublic 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 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");
            }
        }
    }