Javaで配列を反転する方法

Javaで配列を逆にする方法

1. 概要

この簡単な記事では、how we can invert an array in Java.を示します

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

次に、外部ライブラリを使用する2つのソリューションを見ていきます。1つはApache Commons Langを使用し、もう1つは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. Java 8StreamAPIの使用

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 CommonsLangの使用

配列を反転する別のオプションは、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を使用する

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


    com.google.guava
    guava
    22.0

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

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

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




8. 結論

この記事では、Javaで配列を反転させるいくつかの異なる方法を検討しました。 コアJavaのみを使用するいくつかのソリューションと、サードパーティライブラリを使用する他の2つのソリューション(Commons LangGuava)を示しました。

ここに示されているすべてのコードサンプルはfound on GitHubである可能性があります—これはMavenプロジェクトであるため、そのままインポートして実行するのは簡単です。