Collections.reverse yöntemi aslında orijinal listenin öğelerinin ters sırada kopyalanmış olduğu yeni bir liste döndürür, bu nedenle bu, orijinal listenin boyutuna göre O (n) performansına sahiptir.
Daha verimli bir çözüm olarak, bir Listenin tersine çevrilmiş görünümünü Yinelenebilir olarak sunan bir dekoratör yazabilirsiniz. Dekoratörünüz tarafından döndürülen yineleyici, öğeler üzerinde ters sırada gezinmek için dekore edilmiş listenin ListIterator'ını kullanır.
Örneğin:
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);
}
}
Ve bunu şu şekilde kullanırsınız:
import static Reversed.reversed;
...
List<String> someStrings = getSomeStrings();
for (String s : reversed(someStrings)) {
doSomethingWith(s);
}