の中に 前の投稿、方法について説明しました 所定の位置に Javaでリストを逆にします。この投稿では、 ArrayList Javaでは、元のリストの要素の順序を変更せずに、逆の順序でコピーを作成します。指定されたリストは変更可能である場合とそうでない場合がありますが、返されるリストは変更可能である必要があります。

1.Guavaライブラリの使用

Guava’s Lists.reverse() メソッドは、指定されたリストのビューを逆の順序で作成します。元のリストは返されたリストを裏付けるため、返されたリストの変更はこのリストに反映され、その逆も同様です。

新しいものを作成することでこれを回避できます ArrayList 以下に示すように、返されたリストからのインスタンス:

コードをダウンロード

出力:

[5, 4, 3, 2, 1]

2.使用する Collections.reverse() 方法

私たちは、 Collections.reverse() メソッドは、リストをインプレースで変更します。元のリストのコピーを作成してから、 reverse() 元のリストではなく、コピーのメソッド。

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

 
これは、Java8以降で使用する別の方法です。 Collections.reverse() ストリームと一緒に、そして Collectors.collectingAndThen() 逆の順序で要素を収集するメソッド:

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

3.Java8の使用

Java8ストリームを使用してリストを逆にすることもできます。アイデアは、リストのすべての有効なインデックスのストリームを逆の順序で取得し、各インデックスをリスト内のその値にマップし、最後に要素を収集することです。 ArrayList.

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

 
上記のユーティリティメソッドの短縮バージョンは次のとおりです。

4.拡張 AbstractList Class

AbstractList クラスは、の骨格実装を提供します List インターフェース。アイデアは、このクラスを拡張し、 get(), set(), remove()、などのメソッド。逆リストのように動作する必要があります。

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

5.素朴な解決策

最後に、この投稿は、リストを逆にする素朴な方法を議論せずに不完全です。基本的な考え方は、空を作成することです ArrayList リストを逆の順序で繰り返すことにより、元のリストの要素を追加します。

⮚Java8– descendingIterator()

アイデアは、与えられたリストの要素をに蓄積することです LinkedList ストリームを使用します。次に、の要素に対してイテレータを取得します LinkedList を使用して逆の順序で LinkedList.descendingIterator() メソッドを使用して各要素を処理します forEachRemaining() 方法:

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

List.listIterator()

ここでは、アイデアは使用することです ListIterator リストを逆の順序で繰り返します。

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

⮚Forループ

以下に示すように、単純なforループを使用してリストを逆の順序で繰り返すこともできます。

ダウンロード  コードを実行する

出力:

[5, 4, 3, 2, 1]

これで、JavaでArrayListを逆にすることができます。