-1

Java で を使用して 2d ArrayList を逆にするとどうなりCollections.reverse(someArrayList)ますか? 外側の寸法だけが反転しますか?

これが私のコードです:

public ArrayList<ArrayList<Pixel>> getReversedArrayList(ArrayList<ArrayList<Pixel>> original)
 {
 ArrayList<ArrayList<Pixel>> copy = new ArrayList<ArrayList<Pixel>>(original);
 Collections.reverse(copy);
 return copy;
 }
4

2 に答える 2

5

簡単に言えばreverse()、配列リストを介して 1 次元を超えて伝播することはありません。

次のように(単純化のためにピクセルではない)を作成したとしましょうArrayList<ArrayList<Integer>>(これは有効なJavaではなく、単なる概要です):

ArrayList //called outer
    ArrayList //called inner-1
        Integer(11)
        Integer(12)
    ArrayList //called inner-2
        Integer(21)
        Integer(22)

あなたはそれCollections.reverse()からアウターArrayList

あなたは得るでしょう:

ArrayList //called outer
    ArrayList //called inner-2
        Integer(21)
        Integer(22)
    ArrayList //called inner-1
        Integer(11)
        Integer(12)

は、に が含まれreverse()ていることを考慮しません。それらを通常のオブジェクトとして扱い、その内容に触れることなく順序を逆にします。そうしないと、未定義で追跡が困難な動作が発生し、あらゆる種類の豚が飛んでしまいます。ArrayListArrayLists

すべてのインナーを裏返したい場合は、次の簡単なヒントを使用してください。

for(ArrayList innerList: copy){ //named as per your existing code in the original post
    Collections.reverse(innerList);
}

この場合、ブラケットは絶対に必要ではありませんでした。

于 2013-06-30T01:19:01.607 に答える
0

はい、内部要素 ( のインスタンスArrayList<Pixel>) は反転されません。構造の奥深くまで再帰的にすべてを逆にしたい場合は、独自に実装する必要があります。

于 2013-06-30T01:19:09.920 に答える