リストを逆方向に繰り返す
1. 概要
このクイックチュートリアルでは、Javaでリストを逆方向に反復するさまざまな方法について学習します。
2. JavaのIterator
Iteratorは、コレクション内の要素を反復処理できるようにするJava Collections Frameworkのインターフェイスです。 Enumeration. の代わりとしてJava1.2で導入されました
3. コアJavaを使用して逆方向に反復する
3.1. 逆forループ
最も簡単な実装は、リストの先頭に到達したときにforループを使用してstart from the last element of the list, and decrement the indexにすることです。
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);
}
ただし、この方法はreverses the actual list by changing the order of elements in-placeであり、多くの場合望ましくない場合があります。
4. ApacheのReverseListIteratorを使用して逆方向に反復する
Apache Commons Collectionsライブラリには素晴らしいReverseListIteratorクラスがあり、実際にリストを逆にすることなく、リスト内の要素をループすることができます。
開始する前に、Maven Centralから最新の依存関係をインポートする必要があります。
org.apache.commons
commons-collections4
4.1
元のリストをコンストラクターパラメーターとして渡すことにより、新しいReverseListIteratorを作成できます。
ReverseListIterator reverseListIterator = new ReverseListIterator(list);
次に、この反復子を使用して、リストを逆方向にたどることができます。
while (reverseListIterator.hasNext()) {
System.out.println(reverseListIterator.next());
}
5. GuavaのLists.reverse()を使用して逆方向に反復する
同様に、提供されたリストの逆のビューを返すGoogle Guava library also provides a static reverse() method in its Lists class。
最新のGuavaバージョンは、Maven Centralにあります。
com.google.guava
guava
25.0
Listsクラスで静的メソッドreverse()を呼び出すと、逆の方法でリストが表示されます。
List reversedList = Lists.reverse(list);
次に、逆のリストを使用して、元のリストを逆方向に反復できます。
for (String item : reversedList) {
System.out.println(item);
}
このメソッドはreturns a new list with the elements of the original list in reversed orderです。
6. 結論
この記事では、Javaでリストを逆方向に反復するさまざまな方法について説明しました。 コアJavaを使用したいくつかの例と、一般的なサードパーティライブラリを使用しました。
この記事のソースコードと関連するテストケースは、over on GitHubで入手できます。