How to reverse a list
Short answer
Collections.reverse() reverses the list in place:
void main() {
var numbers = new ArrayList<>(List.of(1, 2, 3, 4));
Collections.reverse(numbers);
IO.println(numbers);
}Output:
[4, 3, 2, 1]Without changes
Since Java 21, reversed() returns a reversed view of the list without changing it. It also works with unmodifiable lists:
void main() {
var days = List.of("Mon", "Tue", "Wed");
IO.println(days.reversed());
IO.println(days);
}Output:
[Wed, Tue, Mon]
[Mon, Tue, Wed]Iterating backwards
reversed() is handy right in a loop:
void main() {
var steps = List.of("start", "middle", "end");
for (String step : steps.reversed()) {
IO.println(step);
}
}Output:
end
middle
startCommon mistake
Confusing reversing with sorting in descending order. reverse() just flips the order, it does not sort:
void main() {
var numbers = new ArrayList<>(List.of(3, 1, 2));
Collections.reverse(numbers);
IO.println(numbers);
numbers.sort(Comparator.reverseOrder());
IO.println(numbers);
}Output:
[2, 1, 3]
[3, 2, 1]Functions used in this recipe
- Collections.reverse() — Reverses the order of list elements in place.
- List.reversed() — Returns the list in reverse order without copying it.