Javaで2つの整数配列を比較する

2つの配列を比較するコードを書こうとしています。1つ目の配列には自分で数字を入れていますが,2つ目の配列は入力ファイルから数字を取っています.この配列のサイズは,ファイルの最初の数字によって決まりますが,最初の配列のサイズは常に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;
            }
        }
    }       
}

私が見たところ、あなたはただ、両者が同等であるかどうかを確認しようとしているようですが、もしこれが事実であれば、このようなもので行けばいいのです。

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

これが標準的な方法です。

ところで、javaのドキュメントによると、配列はソートされていないと等しいとは言えないようです。

2つの配列は、両方の配列が同じ数の要素を含み、2つの配列の対応するすべての要素のペアが等しい場合、等しいとみなされます。言い換えれば、2つの配列が同じ要素を同じ順序で含む場合、2つの配列は等しい。

見落としていてすみません。

解説 (3)

配列のサイズが同じであることがわかっていれば,ソートしてから比較した方が証明的に速い

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

配列内のデータの順序を変更したくない場合は,最初に System.arraycopy を行います.

解説 (2)

.equalsのような簡単なものがあるにもかかわらず、あなたのコードには2つの間違いがあることを指摘したいと思います。1つ目は、配列を見ていくときに、btruefalseかを言っています。その後、forループがあるので、再度チェックを始めます。しかし、毎回、bに値を与えています。つまり、何が起こっても、bに設定される値は常に最後のfor-loopの値なのです。次回は、boolean b = trueif equal = true、何もしない、if equal = falseb=false`と設定します。

次に、array1の各値とarray2の各値をチェックすることになります。私の理解が正しければ、配列内の同じ場所にある値だけをチェックすればよいので、2つ目の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)です。

解説 (5)