Вопрос-ответ

How do I reverse an int array in Java?

Как мне обратить вспять массив int в Java?

Я пытаюсь обратить вспять массив int в Java.

Этот метод не инвертирует массив.

for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}

Что с ним не так?

Переведено автоматически
Ответ 1

Чтобы обратить вспять массив int, вы меняете местами элементы, пока не достигнете средней точки, вот так:

for(int i = 0; i < validData.length / 2; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}

То, как вы это делаете, вы меняете местами каждый элемент дважды, так что результат будет таким же, как в исходном списке.

Ответ 2

С помощью Commons.Lang вы могли бы просто использовать

ArrayUtils.reverse(int[] array)

В большинстве случаев быстрее и безопаснее от ошибок использовать легкодоступные библиотеки, которые уже прошли модульное тестирование и протестированы пользователями, когда они решают вашу проблему.

Ответ 3
Collections.reverse(Arrays.asList(yourArray));

java.util.Collections.reverse() может инвертировать java.util.Lists и java.util.Arrays.asList() возвращает список, который оборачивает конкретный массив, который вы ему передаете, следовательно, yourArray инвертируется после вызова Collections.reverse().

Стоимость составляет всего лишь создание одного объекта List и никаких дополнительных библиотек не требуется.

Аналогичное решение было представлено в ответе Тарика и их комментаторов, но я думаю, что этот ответ был бы более кратким и более легко анализируемым.

Ответ 4
public class ArrayHandle {
public static Object[] reverse(Object[] arr) {
List<Object> list = Arrays.asList(arr);
Collections.reverse(list);
return list.toArray();
}
}
java arrays