-5

最初の要素だけを無視して、2つの配列が等しいかどうかを比較する必要があります。反復せずに同じことを達成することは可能ですか?

4

6 に答える 6

9

Arrays.copyOfRange()サブ配列を取得しArrays.equals()、同等性チェックを実行するために使用できます。

明示的な反復はありませんが、舞台裏で反復があることに注意してください。

コードスナップ:

int arr1[] = { 1,2,3,4 };
int arr2[] = { 0,2,3,4 };
System.out.println(Arrays.equals(
        Arrays.copyOfRange(arr1, 1, arr1.length), 
        Arrays.copyOfRange(arr2, 1, arr2.length)));
于 2013-01-10T11:11:25.267 に答える
1

何をしようとしても、2つの配列が等しいかどうかをチェックするには、すべての要素をチェックする必要があります。そのためには、配列を反復処理してすべての要素にアクセスする必要があります。ただし、組み込みの関数を使用することで、手動でこれを行うことを回避できます。関数、同じロジックが舞台裏で発生します。

于 2013-01-10T11:13:46.300 に答える
0

配列はオブジェクトではなく、equalsメソッドを持たないため、あなた(またはあなたが呼び出すメソッド)はこれらの配列を反復処理する必要があると思います。

演算子==は、プリミティブ型の場合にのみ値を比較し、それ以外の場合はポインタ(メモリアドレス)を比較します。つまり、両方の配列が1つで同じである場合にのみ真になり、配列が2つの別個であるが同一の配列である場合は、偽になります。

配列の一部をコピーして比較すると、明らかではない場合でも、配列全体で複数の反復が発生します。(両方の配列のサブ配列を取得するには、それぞれ少なくとも1回の反復が含まれ、別の反復と比較されます。)

つまり、1サイクルを使用して配列を反復処理し、値を1つずつ比較し、インデックス1から始めて最初の要素をスキップできます。次のコードで、オブジェクトタイプパラメータを配列のタイプに置き換えます。

private boolean compareMyArrays(Object[] array1, Object[] array2) {
    if ((array1 == null) && (array2 == null)) {
        return true;
    }

    if ((array1 == null) || (array2 == null)) {
        return false;
    }

    if (array1.length != array2.length) {
        return false;
    }

    for (int i = 1; i < array1.lenght; i++) {
        if ( !array1[i].equals(array2[i]) ) {
            return false;
        }
    }

    return true;
}

お役に立てれば。

于 2013-01-10T11:45:01.403 に答える
0

はい。

2 つの配列の名前が A と B であるとします。


  1. A の最初の要素( )を除くすべての要素で構成される配列 C を作成しますSystem.arraycopy(A, 1, C, 0, A.length();
  2. 最初の要素を除く B のすべての要素で構成される配列 D を作成します。
  3. Arrays.equals()C と D を比較するために呼び出します。

また、Renjiths の点にも注意してください。

于 2013-01-10T11:15:26.500 に答える
0
String[] array1 = {"hi","hi2"};
List<String> temp = new ArrayList<String>(Arrays.asList(array1));

String[] array2 = {"hi3","hi2"};
List<String> temp2 = new ArrayList<String>(Arrays.asList(array2));

boolean condition = temp.subList(1, temp.size()).equals(temp2.subList(1, temp2.size()));

アミットによってすでに指摘されているように、舞台裏で反復があります

于 2013-01-10T11:16:04.937 に答える
0
Arrays.equals(Arrays.asList(array1).subList(1, array1.length), Arrays.asList(array2).subList(1, array2.length));

ただし、Arrays.equals はループを使用します。

于 2013-01-10T11:16:34.353 に答える