Не используйте метод Collections.reverse он фактически переворачивает оригинальный список на месте. Если вы используете его:
Неправильный путь!
Collections.reverse(new ArrayList(stringList))
, чтобы избежать изменений оригинала, это возвращает новый список с элементами исходного списка скопированного в нее в обратном порядке, и такие есть 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);
}
Как ни странно, я прочитал этот вопрос частично через чтение раздела книги Scala, которая занимается неизменными операциями списка ... хорошей демонстрация отсутствия выразительной силы в Ява. – skaffman
Точка цикла «для каждого» заключается в том, что вам просто нужно выполнить операцию над каждым элементом, а порядок не важен.Каждый из них мог обрабатывать элементы в совершенно случайном порядке, и он все равно будет делать то, для чего он был предназначен. Если вам нужно обработать элементы определенным образом, я бы предложил сделать это вручную. – muusbolla
Библиотека коллекций Java. На самом деле это не имеет никакого отношения к языку. Вина Джош Блох. –