1. 概要

この簡単な記事では、Javaで配列を反転する方法を示します。

純粋なJava8ベースのソリューションを使用してこれを行ういくつかの異なる方法を見ていきます。それらのいくつかは既存のアレイを変更し、いくつかは新しいアレイを作成します。

次に、外部ライブラリを使用する2つのソリューションを見ていきます。1つは Apache Commons Lang を使用し、もう1つは GoogleGuavaを使用します。

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. Java 8 StreamAPIの使用

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<Object> list = Arrays.asList(array);
    Collections.reverse(list);
}

前の例と比較すると、これはタスクを実行するためのより読みやすい方法です。

6. ApacheCommonsLangの使用

配列を反転する別のオプションは、 Apache CommonsLangライブラリを使用することです。 これを使用するには、最初にライブラリを依存関係として含める必要があります。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

Commons Lang の最新バージョンは、 MavenCentralにあります。

ArrayUtils クラスを使用して、配列を反転してみましょう。

public void invertUsingCommonsLang(Object[] array) {
    ArrayUtils.reverse(array);
}

ご覧のとおり、このソリューションは非常に単純です。

7. GoogleGuavaを使用する

もう1つのオプションは、 GoogleGuavaライブラリを使用することです。 Commons Lang で行ったように、依存関係としてライブラリを含めます。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

最新バージョンはMavenCentralにあります。

次に、GuavaのListsクラスのreverseメソッドを使用して、配列を反転できます。

public Object[] invertUsingGuava(Object[] array) {
    List<Object> list = Arrays.asList(array);
    List<Object> reversed = Lists.reverse(list);
    return reversed.toArray();
}

8. 結論

この記事では、Javaで配列を反転するいくつかの異なる方法について説明しました。 コアJavaのみを使用するいくつかのソリューションと、サードパーティライブラリを使用する他の2つのソリューション( Commons LangおよびGuava)を示しました。

ここに示されているすべてのコードサンプルは、GitHub 見つけることができます—これはMavenプロジェクトであるため、そのままインポートして実行するのは簡単です。