วิธี 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);
}