最初の要素だけを無視して、2つの配列が等しいかどうかを比較する必要があります。反復せずに同じことを達成することは可能ですか?
6 に答える
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)));
何をしようとしても、2つの配列が等しいかどうかをチェックするには、すべての要素をチェックする必要があります。そのためには、配列を反復処理してすべての要素にアクセスする必要があります。ただし、組み込みの関数を使用することで、手動でこれを行うことを回避できます。関数、同じロジックが舞台裏で発生します。
配列はオブジェクトではなく、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;
}
お役に立てれば。
はい。
2 つの配列の名前が A と B であるとします。
A の最初の要素( )を除くすべての要素で構成される配列 C を作成しますSystem.arraycopy(A, 1, C, 0, A.length();
。- 最初の要素を除く B のすべての要素で構成される配列 D を作成します。
Arrays.equals()
C と D を比較するために呼び出します。
また、Renjiths の点にも注意してください。
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()));
アミットによってすでに指摘されているように、舞台裏で反復があります
Arrays.equals(Arrays.asList(array1).subList(1, array1.length), Arrays.asList(array2).subList(1, array2.length));
ただし、Arrays.equals はループを使用します。