リストを逆方向に繰り返す
1. 概要
このクイックチュートリアルでは、Javaのリストを逆方向に反復するさまざまな方法について学習します。
2. イテレータinJava
Iterator は、 Java Collections Framework のインターフェースであり、コレクション内の要素を反復処理できます。 これは、Java1.2での代替として導入されました
3. コアJavaを使用して逆方向に繰り返す
3.1. ループの場合はを反転
最も簡単な実装は、 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のCollectionsクラスは、指定されたリスト内の要素の順序を逆にする静的メソッドを提供します。
Collections.reverse(list);
逆にしたリストを使用して、元の要素を逆方向に繰り返すことができます。
for (String item : list) {
System.out.println(item);
}
ただし、この方法では、は、要素の順序をインプレースに変更することで実際のリストを逆にし、多くの場合、望ましくない場合があります。
4. ApacheのReverseListIteratorを使用して逆方向に反復する
Apache Commons Collections ライブラリには、リスト内の要素を実際に逆にすることなくループできる優れたReverseListIteratorクラスがあります。
開始する前に、 MavenCentralから最新の依存関係をインポートする必要があります。
<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ライブラリは、提供されたリストの逆ビューを返すListsクラスに静的reverse()メソッドも提供します。
最新のGuavaバージョンは、 MavenCentralにあります。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
Listsクラスで静的メソッドreverse()を呼び出すと、逆の方法でリストが得られます。
List<String> reversedList = Lists.reverse(list);
次に、逆にしたリストを使用して、元のリストを逆方向に繰り返すことができます。
for (String item : reversedList) {
System.out.println(item);
}
このメソッドは、元のリストの要素を逆の順序で含む新しいリストを返します。
6. 結論
この記事では、Javaのリストを逆方向に反復するさまざまな方法について説明しました。 コアJavaを使用した例と、人気のあるサードパーティライブラリを使用した例をいくつか紹介しました。
この記事のソースコードと関連するテストケースは、GitHubでから入手できます。