Как инвертировать массив в Java

Как инвертировать массив в 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 list = Arrays.asList(array);
    Collections.reverse(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 list = Arrays.asList(array);
    List reversed = Lists.reverse(list);
    return reversed.toArray();
}




8. Заключение

В этой статье мы рассмотрели несколько различных способов инвертировать массив в Java. Мы показали несколько решений, использующих только ядро ​​Java, и два других решения, использующих сторонние библиотеки -Commons Lang иGuava.

Все показанные здесь примеры кода могут бытьfound on GitHub - это проект Maven, поэтому его должно быть легко импортировать и запускать как есть.