Как инвертировать массив в Java
1. обзор
В этой быстрой статье мы покажемhow we can invert an array in Java.
Мы увидим несколько различных способов сделать это с использованием чистых решений на основе Java 8 - некоторые из них изменяют существующий массив, а некоторые создают новый.
Далее мы рассмотрим два решения с использованием внешних библиотек - одно с использованиемApache Commons Lang, а другое с использованиемGoogle Guava.
2. Определение проблемы
Основная идея состоит в том, чтобы изменить порядок элементов в массиве. Итак, если дан массив:
fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}
Мы хотим получить:
invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes", "apples"}
Давайте посмотрим, как это сделать.
3. Использование традиционного циклаfor
Первый способ, которым мы могли бы подумать об инвертировании массива, - это использовать циклfor:
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 8Stream
Мы также можем инвертировать массив с помощью Stream API:
Object[] invertUsingStreams(Object[] array) {
return IntStream.rangeClosed(1, array.length)
.mapToObj(i -> array[array.length - i])
.toArray();
}
Здесь мы используем методIntStream.range для генерации последовательного потока чисел. Затем мы отображаем эту последовательность в индексы массива в порядке убывания.
5. ИспользуяCollections.reverse()
Давайте посмотрим, как инвертировать массив с помощью методаCollections.reverse():
public void invertUsingCollectionsReverse(Object[] array) {
List
По сравнению с предыдущими примерами это более удобочитаемый способ выполнения задачи.
6. Использование Apache Commons Lang
Другой вариант инвертирования массива - использование библиотекиApache Commons Lang. Чтобы использовать его, мы должны сначала включить библиотеку в качестве зависимости:
org.apache.commons
commons-lang3
3.5
Последнюю версиюCommons Lang можно найти по адресуMaven Central.
Давайте воспользуемся классомArrayUtils для инвертирования массива:
public void invertUsingCommonsLang(Object[] array) {
ArrayUtils.reverse(array);
}
Как видим, это решение довольно простое.
7. Использование Google Guava
Еще один вариант - использовать библиотекуGoogle Guava. Как и в случае сCommons Lang, мы добавим библиотеку в качестве зависимости:
com.google.guava
guava
22.0
Последнюю версию можно найти по адресуMaven Central.
Затем мы можем использовать методreverse в классеGuava’sLists, чтобы инвертировать массив:
public Object[] invertUsingGuava(Object[] array) {
List
8. Заключение
В этой статье мы рассмотрели несколько различных способов инвертировать массив в Java. Мы показали несколько решений, использующих только ядро Java, и два других решения, использующих сторонние библиотеки -Commons Lang иGuava.
Все показанные здесь примеры кода могут бытьfound on GitHub - это проект Maven, поэтому его должно быть легко импортировать и запускать как есть.