[Java]リスト(List)を逆順にソートするには?

Java

どうも、ちょげ(@chogetarou)です。

リスト(List)を逆順にソートする方法を紹介します。

スポンサーリンク

方法

リスト(List)を逆順にソートする方法は、2つあります。

Collections.reverse()

ひとつは、Collections.reverse()を使う方法です。

まず、Collectionsをインポートします。

import java.util.Collections;

次に、Collectionsからreverse()を呼び出します。

Collections.reverse()の引数にリストを指定します。

//list=対象のリスト
Collections.reverse(list);

上記のCollections.reverse()は、引数のリスト(List)を逆順にソートします。

使用例

import java.util.Collections;
import java.util.ArrayList;

    
public class Main {

    public static void main(String[] args) throws Exception {
        ArrayList<Integer> nums = new ArrayList<Integer>(5);
        nums.add(1);
        nums.add(2);
        nums.add(3);
        nums.add(4);
        nums.add(5);
        
        Collections.reverse(nums);
        
        System.out.println(nums);
    }
}
出力:
[5, 4, 3, 2, 1]

for文

もうひとつは、for文を使う方法です。

まず、for文をリスト(List)の長さでループします。

次に、ループ処理で、リストからadd()を呼び出します。

add()の第1引数にループ変数を指定し、第2引数でリストからremove()を呼び出します。

そして、remove()の引数にリストの末尾のインデックスを指定します。

//list=対象のリスト
for (int i = 0, j = list.size() -1;  i < j; i++) {
    list.add(i, list.remove(j));
}

上記のfor文は、ループしたリスト(List)を逆順にソートします。

逆順にソートした新しい配列を生成したい場合は、まず、逆順用のリストを用意します。

次に、リストを長さでforループします。

ループ処理で元のリストの末尾から用意したリストに要素を追加します。

//逆順にソートしたリストを生成
ArrayList<T> reverse = new ArrayList<T>(count);

for (int i = 0;  i < arr.size(); i++) {
    reverse.add(i, arr.get(arr.size() - 1 - i));
}

使用例

import java.util.ArrayList;
    
public class Main {

    public static void main(String[] args) throws Exception {
        ArrayList<Integer> nums = new ArrayList<Integer>(5);
        nums.add(1);
        nums.add(2);
        nums.add(3);
        nums.add(4);
        nums.add(5);
        
        for (int i = 0, j = nums.size() -1;  i < j; i++) {
            nums.add(i, nums.remove(j));
        }
        
        System.out.println(nums);
    }
}
出力:
[5, 4, 3, 2, 1]

まとめ

リスト(List)を逆順にソートする方法は、次の2つです。

  • Collections.reverse()を使う方法
    Collections.reverse(list);
  • for文を使う方法

コメント

タイトルとURLをコピーしました