リストを逆方向に繰り返す

1概要

このクイックチュートリアルでは、Javaのリストを逆方向に繰り返すことができるさまざまな方法について学習します。

** 2 Javaの イテレーター

Iterator は、https://docs.oracle.com/javase/8/docs/のインタフェースです。 technotes/guide/collections/index.html[Java Collections Framework]を使用すると、コレクション内の要素を繰り返し処理できます。これは、 列挙型 の代わりにJava 1.2で導入されました。

3コアJava を使用した逆方向の反復

3.1. 逆の for ループ

最も単純な実装は、リストの最後の要素から開始するために for ループを使用し、リストの先頭に到達するときにインデックスを減少させることです。

for (int i = list.size(); i-- > 0; ) {
    System.out.println(list.get(i));
}

3.2. ListIterator

  • ListIterator を使用して、リスト内の要素を反復処理できます。

リストのサイズを ListIterator のインデックスとして指定すると、リストの末尾を指すイテレータが得られます。

ListIterator listIterator = list.listIterator(list.size());

この反復子により、リストを逆方向にたどることができます。

while (listIterator.hasPrevious()) {
    System.out.println(listIterator.previous());
}

3.3. Collections.reverse()

  • Javaのhttps://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#reverse(java.util.List)[ Collections ]クラスは、順序を逆にする静的メソッドを提供します。指定されたリストの要素の数:**

Collections.reverse(list);

次に、逆のリストを使って元の要素を逆方向に反復処理できます。

for (String item : list) {
    System.out.println(item);
}

ただし、この方法では、要素の順序をその場で変更することによって実際のリストが逆になるため、多くの場合は望ましくない場合があります。

4 Apacheの ReverseListIterator を使用して逆方向に反復する

  • Apache Commons Collections ライブラリには ReverseListIterator リスト内の要素を実際に元に戻すことなくループできるようにするクラス。**

始める前に、https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commonsから最新の依存関係をインポートする必要があります。 -collections4%22[メイヴン中央]:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>

元のリストをコンストラクタのパラメータとして渡すことで、新しい ReverseListIterator を作成できます。

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

それから、この反復子を使ってリストを逆方向にたどることができます。

while (reverseListIterator.hasNext()) {
    System.out.println(reverseListIterator.next());
}

5 Guavaの Lists.reverse() を使用して逆方向に反復する

同様に、 Google Guavaライブラリの https://google.github.io/guava/releases/snapshot-jre/api/docs/com/google/common/collect/listに、静的な reverse() メソッドもあります。 html#reverse-java.util.List-[Lists] class これは、提供されたリストの逆のビューを返します。

最新のGuavaバージョンはhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22[Mavenで見つけることができます中央]:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>25.0</version>
</dependency>

Lists クラスで静的メソッド reverse() を呼び出すと、リストが逆になります。

List<String> reversedList = Lists.reverse(list);

次に、反転リストを使用して、元のリストを逆方向に反復処理できます。

for (String item : reversedList) {
    System.out.println(item);
}

このメソッドは、元のリストの要素を逆の順序で持つ新しいリストを返します

6. 結論

この記事では、Javaのリストを逆方向に反復するさまざまな方法について説明しました。私たちは、人気のあるサードパーティのライブラリを使用するだけでなく、コアJavaを使用していくつかの例を経験しました。

この記事のソースコードと関連するテストケースはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[GitHubで利用可能]です。