详谈----如何判断两个数组是否相等

首先定义两个数组
int[] arry1={1,2,3,4,5,6};
int[] arry2={1,2,3,4,5,6};

判断这两个数组的元素是否相等(这里以整型数组为例,其他类型一样的),首先想的是关系运算符==,很显然这样判断是不等的,因为关系运算符==在比较时是比较的二者的内存地址,定义两个数组当然开辟了两个不同的内存空间。

其次可能想到的是equals方法,这是字符串比较的常用方法,可能会想到用arry1.equals(arry2),但是我们去看看源码

 public boolean equals(Object obj) {
        return (this == obj);
    }

这是Object类下的方法,很明显也是在比较二者的地址,返回的当然是false了

我觉得可能还会有人这样想:把两个数组分别转换成字符串,再比较两个字符串是否相等。我们来试试看

public class main {
    public static void main(String[] args) {
        int[] artg={1,2,3,4,5,6};
        int[] aty={1,2,3,4,5,6};
        int length1=artg.length;
        int length2=aty.length;
        if(add(artg,length1).equals(add(aty,length2))){       //判断转换后的字符串是否相等
            System.out.println("true");
        }else{
            System.out.println("false");
        }
    }
    /**
     * 将数组转换成字符串
     * @param arr:数组名
     * @param length:数组长度
     * @return
     */
    static String add(int[] arr,int length){
        StringBuffer stringBuffer=new StringBuffer();
        for (int i=0;i<length;i++){
            stringBuffer.append(arr[i]+" ");
        }
        String sr5=stringBuffer.toString();
        return sr5;
    }
}

运行结果
我们看到返回为true,成功了!但是有没有觉得比较麻烦啊,其实我们可以调用现成的方法,在java.util包下有Arrays类,该类里面有equals方法,我们去看看源码

 public static boolean equals(int[] a, int[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;

        int length = a.length;
        if (a2.length != length)
            return false;

        for (int i=0; i<length; i++)     
            if (a[i] != a2[i])
                return false;

        return true;
    }

官方注释说到:In other words, two arrays are equal if they contain the same elements in the same order. Also,two array references are considered equal if both are null.
谷歌翻译:换句话说,如果两个数组包含相同顺序的相同元素,则它们相等。 另外,如果两个数组引用均为 null ,则认为它们相等。

我们来实践一下,

public class main {
    public static void main(String[] args) {
        int[] artg={3,1,6,2,5,4};
        int[] aty={1,2,4,3,6,5};
        Arrays.sort(artg);     //对两数组进行排序
        Arrays.sort(aty);
        if (Arrays.equals(artg,aty)){
            System.out.println("true");
        }else{
            System.out.println("false");
        }
    }
}

在这里插入图片描述
成功了!代码量减少了一半,而且对无序数组也适用!

发布了18 篇原创文章 · 获赞 43 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42194695/article/details/103467762