詳談----如何判斷兩個數組是否相等

首先定義兩個數組
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");
        }
    }
}

在這裏插入圖片描述
成功了!代碼量減少了一半,而且對無序數組也適用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章