2

foreach別のforeachループ内にネストされたループ内の現在のオブジェクトが、両方とも同じオブジェクトを反復処理しているかどうかを判断しようとしてArrayListいます。現在、両方が同じオブジェクトを反復処理しています。foreachループの規則により、ArrayList内のオブジェクトの現在のインデックスを取得して、現在のオブジェクトが等しいかどうかを比較できるようにする簡単な方法はないようです。continue基本的に、両方のforeachループが現在同じオブジェクトを反復処理している場合は、内側のforeachループ内の現在のオブジェクトをオーバーオーバーしたいと思います。

たとえば、ArrayList<Object>名前付きobjects

for (Object a : objects) {

    for (Object b : objects) {

        //If both loops are currently iterating over the same object
        //from the ArrayList objects, skip to the next iteration of the inner
        //foreach loop
        if (a == b) {

            continue;

        }

        //If both foreach loops are not iterating over the same object
        //execute some operation

    }

}

演算子を使用して、==現在繰り返されている両方のオブジェクトが同じオブジェクトの信頼性があるかどうかをテストしていますか、それとも単に通常forのループを使用して、インデックスに基づいてオブジェクトを比較する方がよいでしょうか?

4

3 に答える 3

4

==この場合、オブジェクトを比較しても問題ありませんが、同じオブジェクトを複数回リストに追加しなかった場合に限ります。リストに同じオブジェクトが複数の場所にある場合、これは問題であり、標準のforループを使用する必要があります。

于 2013-01-12T21:54:34.300 に答える
0

私はそれを次のように行います:

for (Object a : objects) {

    for(int i = 0; i < objects.size(); i++) {

        if(a.equals(objects.get(i)) {

            continue;
        }

    }

}

それは私の目にそれをする最も簡単な方法です。

于 2013-01-12T21:54:52.947 に答える
0

同じオブジェクトがArrayList複数回追加された場合、==等式の比較によって望ましくない結果が生じる可能性があります。の同じインデックス付きアイテムを比較していないことを確認するにはArrayList(つまり、現在2Dマトリックスの対角線上にいます)

このことを考慮:

Iterator<Object> outerIterator, innerIterator;
outerIterator = objects.iterator();
for (int i=0; outerIterator.hasNext(); ++i) {
    a = outerIterator.next();
    innerIterator = objects.iterator();
    for(int j=0; innerIterator.hasNext(); ++j) {
        b = innerIterator.next();
        //comparing for elements for SAME index of iteration
        //NOT comparing for element equality
        if(i==j) { continue; } 
        // else do stuff with a & b
    }
}

同等に:(そして私はもっときれいだと思う)

int i=0;
for (Object a : objects) {
    int j=0;
    for (Object b : objects) {
      //comparing for elements for SAME index of iteration
      //NOT comparing for element equality
      if (i==j) { continue; }
      //else do stuf with a & b
      ++j;
    }
    ++i;
}

要約する:

浅い等式をチェックしたい場合はを使用してくださいa==b

深い平等をチェックしたい場合は、を使用してくださいa.equals(b)

インデックスが等しいかどうかを確認する場合は、を使用しますi==j

于 2013-01-12T22:14:45.307 に答える