Javaでfor eachループを逆順に実行できますか? 質問する

Javaでfor eachループを逆順に実行できますか? 質問する

Java を使用してリストを逆順に実行する必要があります。

つまり、これは次のように転送されます。

for(String string: stringList){
//...do something
}

逆順に文字列リストを反復処理する方法はありますか?それぞれ構文?

明確にするために:リストを逆順に反復する方法は知っていますが、(好奇心から)それを逆順に行う方法を知りたいです。それぞれスタイル。

ベストアンサー1

Collections.reverse メソッドは、実際には元のリストの要素を逆の順序でコピーした新しいリストを返すため、元のリストのサイズに関しては O(n) のパフォーマンスになります。

より効率的な解決策として、リストの逆ビューを Iterable として表示するデコレータを作成することもできます。デコレータによって返されるイテレータは、デコレートされたリストの ListIterator を使用して、逆の順序で要素を調べます。

例えば:

public class Reversed<T> implements Iterable<T> {
    private final List<T> original;

    public Reversed(List<T> original) {
        this.original = original;
    }

    public Iterator<T> iterator() {
        final ListIterator<T> i = original.listIterator(original.size());

        return new Iterator<T>() {
            public boolean hasNext() { return i.hasPrevious(); }
            public T next() { return i.previous(); }
            public void remove() { i.remove(); }
        };
    }

    public static <T> Reversed<T> reversed(List<T> original) {
        return new Reversed<T>(original);
    }
}

次のように使用します:

import static Reversed.reversed;

...

List<String> someStrings = getSomeStrings();
for (String s : reversed(someStrings)) {
    doSomethingWith(s);
}

おすすめ記事