Рубрики
Без рубрики

Как обратить вспять массив в Java

Изучите несколько подходов к инвертирования массивов в Java.

Автор оригинала: baeldung.

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 list = Arrays.asList(array);
    Collections.reverse(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 list = Arrays.asList(array);
    List reversed = Lists.reverse(list);
    return reversed.toArray();
}

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

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

Все образцы кода, показанные здесь, могут быть найдено на GitHub – это проект Maven, поэтому его легко импортировать и запускать в том же объеме.