不要使用Collections.reverse方法,它实际上反转原始列表到位。如果你使用它:
错误的方法!
Collections.reverse(new ArrayList(stringList))
为了避免修改原始,这返回一个新的列表,其中原始列表的元素以相反的顺序被复制到其中,并且对于原始列表的大小具有O(n)性能和空间要求。
作为一个更有效的解决方案,你可以写一个类,它提供了一个反转视图的列表作为一个迭代的通用。您的类返回的迭代器将使用装饰列表的ListIterator以相反的顺序遍历元素。
例如:
public class Reversed implements Iterable {
private final List original;
public Reversed(List original) {
this.original = original;
}
public Iterator iterator() {
final ListIterator i = original.listIterator(original.size());
return new Iterator() {
public boolean hasNext() { return i.hasPrevious(); }
public T next() { return i.previous(); }
public void remove() { i.remove(); }
};
}
public static Reversed reversed(List original) {
return new Reversed(original);
}
}
你会使用它像:
import static Reversed.reversed;
...
List someStrings = getSomeStrings();
for (String s : reversed(someStrings)) {
doSomethingWith(s);
}