1. Обзор
В этой быстрой статье мы покажем как мы можем инвертировать массив в Java.
Мы увидим несколько различных способов сделать это с помощью чистых Java 8-основанных решений – некоторые из них мутировать существующий массив, а некоторые создать новый.
Далее мы посмотрим на два решения с использованием внешних библиотек – одно с использованием Апач Викисклад Ланг и один с Гуава, .
2. Определение проблемы
Основная идея заключается в том, чтобы изменить порядок элементов в массиве. Итак, если данный массив:
fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}
Мы хотели бы получить:
invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes", "apples"}
Давайте посмотрим, как мы можем это сделать.
3. Использование традиционных для петли
Первый способ, который мы могли бы подумать о инвертировать массив с помощью для петля:
void invertUsingFor(Object[] array) { for (int i = 0; i < array.length / 2; i++) { Object temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp; } }
Как мы видим, код итерирует через половину массива, изменяя элементы в симметричных положениях.
Мы используем временную переменную, чтобы не потерять значение текущего положения массива во время итерации.
4. Использование API Java 8 Stream
Мы также можем инвертировать массив с помощью API Stream:
Object[] invertUsingStreams(Object[] array) { return IntStream.rangeClosed(1, array.length) .mapToObj(i -> array[array.length - i]) .toArray(); }
Здесь мы используем метод IntStream.диапазон для создания последовательного потока чисел. Затем мы сопоставим эту последовательность на индексы массивов в порядке убывания.
5. Использование Collections.reverse()
Давайте посмотрим, как инвертировать массив с помощью Collections.reverse () метод:
public void invertUsingCollectionsReverse(Object[] array) { List
По сравнению с предыдущими примерами, это более читаемый способ выполнения задачи.
6. Использование Apache Commons Ланг
Другой вариант инвертировать массив заключается в использовании Апач Викисклад Ланг библиотека. Чтобы использовать его, мы должны сначала включить библиотеку в качестве зависимости:
org.apache.commons commons-lang3 3.11
Последняя версия Викисклад Лэнг можно найти на Мавен Центральный .
Давайте использовать ArrayUtils класс для инвертировать массив:
public void invertUsingCommonsLang(Object[] array) { ArrayUtils.reverse(array); }
Как мы видим, это решение довольно простое.
7. Использование Google Гуава
Еще один вариант заключается в использовании Гуава, библиотека. Так же, как мы сделали с Викисклад Лэнг , мы включим библиотеку в качестве зависимости:
com.google.guava guava 22.0
Последнюю версию можно найти на Мавен Центральный .
Тогда мы можем использовать обратный метод в Гуава Списки класс для инвертировать массив:
public Object[] invertUsingGuava(Object[] array) { List
8. Заключение
В этой статье мы рассмотрели несколько различных способов инвертировать массив в Java. Мы показали несколько решений, использующих только ядро Java и два других решения, которые используют сторонние библиотеки – Викисклад Лэнг и Гуава .
Все образцы кода, показанные здесь, могут быть найдено на GitHub – это проект Maven, поэтому его легко импортировать и запускать в том же объеме.