繁体   English   中英

如何比较两个数组?

[英]How do I compare two arrays?

如何比较两个数组的大小和内容?

在带有构造函数的类中,我创建了以下equals()方法:

public boolean equals(VarArray otherArray) {
    if ((myInts.equals(otherArray)))) { 
        return true;
    }else {
        return false;
    }
}

这就是我在要测试的类中使用它的方式,但仍然会得到false而不是true

int[] array = {0,1,2,3,4,5,6,7,8,9,10};

VarArray testArray = new VarArray(array);
VarArray testArray2 = new VarArray(array);

System.out.println("\n" + testArray.equals(testArray2)); // should be true

使用Arrays.equals(testArray, testArray2);

otherArray的类型是VarArray和你比较它的数组int秒。 您想要的是:

public boolean equals(VarArray otherArray) {
   return Arrays.equals(myInts, otherArray.myInts);
}

Arrays.deepEquals()将执行深度比较,这还将检查是否有任何嵌套元素。

public boolean equals(VarArray otherArray) {
    return Arrays.deepEquals(myInts, otherArray.getInts());
}

你对平等的追求是错误的。 在您的情况下,它将调用array的equals方法,该方法将比较两个不同的数组的对象实例。 正确执行equals方法将如下所示:

public class VarArray
{

    private int[] myInts = null;

    private int[] getMyInts()
    {
        return myInts;
    }

    public VarArray(int[] arr)
    {
        myInts = arr;
    }

    public boolean equals(VarArray otherArray)
    {
        if (myInts == null && otherArray == null)
        {
            return true;
        }

        if (myInts == null || otherArray == null)
        {
            return false;
        }

        if (myInts.length != otherArray.getMyInts().length)
        {
            return false;
        }

        int[] otherMyInts = otherArray.getMyInts();
        for (int i = 0; i < myInts.length; i++)
        {
            if (myInts[i] != otherMyInts[i])
            {
                return false;
            }
        }

        return true;
    }
}

或者如果您不想编写这样的代码,我认为浪费时间和精力使用java.util.Arrays并使用此代码

int[] array = {0,1,2,3,4,5,6,7,8,9,10};
        int[] array1 = {0,1,2,3,4,5,6,7,8,9,10};
boolean isEqual = Arrays.equals(array, array1);
        System.out.println(isEqual);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM