2

私はJavaが初めてです。私を助けてください。

Array オブジェクトと、両方の配列の各要素を比較したい。では、それらが同じかどうかを確認するには、何を使用すればよいですか: equalsdeepEqualsまたはcompareTo?

4

2 に答える 2

2

あなたの問題を理解しているかどうかはわかりませんが、これが少し役立つかもしれません。

Arrays.equals(array1, array2)のような 1 次元配列で使用されますint[10]Arrays.deepEquals(array1,array2)のような 1 つ以上の次元配列用ですint[2][4]。比較したい配列を持つ次元の数に基づいて 1 つを選択します。

編集

コメントからのコードはコンパイルされませんが、問題を理解し始めています。配列はオブジェクトであり、デフォルトではequals(Object obj)メソッドで返されることを知っておく必要がありますthis == objobjこれらは、配列に格納されている値で配列を比較するのではなく、他のオブジェクト(他の配列) からの参照に、比較している同じ配列への参照が含まれているかどうかのみをチェックすることを意味します( this)。

こんな感じで確認できます

Integer[] a1=new Integer[2];
Integer[] a2=new Integer[2];
for (int i=0; i<2; i++){
    a1[i]=i;
    a2[i]=a1[i];
}
System.out.println(a1.equals(a2));//false

しかし、i2ポイント配列への参照をi1equals から変更すると返されますtrue

a2=a1;//now my i2 reference points array from i1
System.out.println(a1.equals(a2));//true

配列内の要素を比較するには、配列を反復処理する必要があります。それを行う独自のコードを記述したり、それを行う準備ができているメソッドを使用したりできます。Java は classjava.util.Arraysでそのようなメソッドを提供しますが、Apache Commons -> ArrayUtils クラスなどの他のライブラリを使用することを誰も止めません。

于 2012-06-21T14:52:46.497 に答える
1

APIが言うように、ArrayUtils.equalsは浅い比較を行います。Arrays/ArrayUtils.deepEquals は深い比較を行います... << 浅い比較のみが必要な理由がない限り、これはおそらく必要なもの (deepEquals) です。

于 2012-06-21T14:48:15.540 に答える