Как развернуть массив
Короткий ответ
Меняйте местами первый и последний элементы, двигаясь к середине:
void main() {
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0, j = numbers.length - 1; i < j; i++, j--) {
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
IO.println(Arrays.toString(numbers));
}Результат:
[5, 4, 3, 2, 1]Массив объектов
Arrays.asList() даёт вид на массив, поэтому Collections.reverse() разворачивает сам массив:
void main() {
String[] letters = {"a", "b", "c"};
Collections.reverse(Arrays.asList(letters));
IO.println(Arrays.toString(letters));
}Результат:
[c, b, a]Новый массив
Если исходный массив нужен без изменений, создайте развёрнутую копию через поток:
void main() {
int[] numbers = {1, 2, 3};
int[] reversed = IntStream.range(0, numbers.length)
.map(i -> numbers[numbers.length - 1 - i])
.toArray();
IO.println(Arrays.toString(numbers));
IO.println(Arrays.toString(reversed));
}Результат:
[1, 2, 3]
[3, 2, 1]Частая ошибка
Пройти цикл до конца массива вместо середины. Каждая пара меняется дважды, и массив возвращается к исходному порядку:
void main() {
int[] numbers = {1, 2, 3, 4};
for (int i = 0; i < numbers.length; i++) {
int j = numbers.length - 1 - i;
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
IO.println(Arrays.toString(numbers));
}Результат:
[1, 2, 3, 4]Функции из этого ответа
- Collections.reverse() — Разворачивает порядок элементов списка на месте.
- List.reversed() — Возвращает список в обратном порядке, не копируя его.
- Arrays.asList() — Возвращает список фиксированного размера, который работает поверх массива.