【Java】sortでList(リスト)の要素のソート(並び替え)を行う!
リストの要素の並び替え(ソート)を行うにはCollectionsクラスのsortメソッドを使用します。
Collectionsクラスのsortメソッドは、リストの要素を並び替えるメソッドです。
そのため、無作為に並んでいるリストの要素を順番に並び替える際にsortメソッドが使用されます。
また、CollectionsクラスのreverseOrderメソッドを使うことで要素を降順に並び替えることができ、Comparatorクラスを使用することで自分の決めたルールで要素を並び替えることもできます。
Comparatorクラスのsortメソッドを使って以下の場合でリストの要素の並び替え(ソート)を行います。
⚫︎ リストの要素を昇順に並び替える場合
⚫︎ リストの要素を降順に並び替える場合
⚫︎ リストの要素を自分のルールで並び替える場合
目次
sortメソッドとは
Collectionsクラスのsortメソッドとは、リストの要素を並び替えるメソッドになります。
sortメソッドの書き方
Collectionsクラスのsortメソッドの構文は下記となります。
1 2 3 |
import java.util.Collections; Collections.sort(リスト); |
まず、sortメソッドが使用できるように Collectionsクラスをインポートします。
そして、sortにパラメータとしてリストを指定することでリストの要素を「自然順序付け」に従って、指定されたリストを昇順にソートします。
また、sortメソッドの構文は下記の様にも書くこともできます。
1 |
Collections.sort(リスト [,コンパレータ]); |
第2パラメータとしてコンパレータを指定することでコンパレータが示す順序に従って、指定されたリストをソートします。
sortメソッドの注意点
sortメソッドは戻り値を戻しません。
つまり、引数で渡したリストの中身を書き換えてソートしてしまい、ソート前のリストのバックアップが取れませんので注意してください。
リストの要素の並び替えを行うサンプルコード
リストの要素の並び替えを行うサンプルコードを紹介します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// リストの要素をソートする import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) throws Exception { // 数値のリストを用意する List<Integer> list1 = new ArrayList<Integer>(); Main.setElement(list1); System.out.println("昇順でソートする"); // ソート前のリストの中身を表示する System.out.println("・ソート前"); System.out.println(list1); // ソートを実行 Collections.sort(list1); // ソート後のリストの中身を表示する System.out.println("・ソート後"); System.out.println(list1); } // リストの初期化を行うメソッド static void setElement(List<Integer> list) { // リストに要素を設定 list1.add(Integer.valueOf(180)); list1.add(Integer.valueOf(551)); list1.add(Integer.valueOf(207)); list1.add(Integer.valueOf(162)); list1.add(Integer.valueOf(183)); list1.add(Integer.valueOf(64)); } } |
出力結果
昇順でソートする
・ソート前
[180, 551, 207, 162, 183, 64]
・ソート後
[64, 162, 180, 183, 207, 551]
sortメソッドによってリストの中身が昇順に並び替えられています。
要素を降順に並び替える場合
要素を降順に並び替える場合にはCollectionsクラスのreverseOrderメソッドを使用します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// リストの要素をソートする import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) throws Exception { // 数値のリストを用意する List<Integer> list2 = new ArrayList<Integer>(); Main.setElement(list2); System.out.println("降順でソートする"); // ソート前のリストの中身を表示する System.out.println("・ソート前"); System.out.println(list2); // ソートを実行 Collections.sort(list2, Collections.reverseOrder()); // ソート後のリストの中身を表示する System.out.println("・ソート後"); System.out.println(list2); } // リストの初期化を行うメソッド static void setElement(List<Integer> list) { // リストに要素を設定 list2.add(Integer.valueOf(180)); list2.add(Integer.valueOf(551)); list2.add(Integer.valueOf(207)); list2.add(Integer.valueOf(162)); list2.add(Integer.valueOf(183)); list2.add(Integer.valueOf(64)); } } |
出力結果
降順でソートする
・ソート前
[180, 551, 207, 162, 183, 64]
・ソート後
[551, 207, 183, 180, 162, 64]
sortメソッドの中にCollectionsクラスのreverseOrderメソッドを指定することでリストの中身が降順に並び替えられています。
要素を自分のルールで並び替える場合
自分のルールで要素を並び替える場合は「Comparator」インタフェースを実装したクラスを用意します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
// リストの要素をソートする import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) throws Exception { // 数値のリストを用意する List<Integer> list3 = new ArrayList<Integer>(); Main.setElement(list3); System.out.println("自作のルールでソートする"); // 奇数だけでソート、その後に偶数のみのソートを行うという // Comparatorを匿名クラスを使って作成する Comparator<Integer> comp = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { int val1 = o1.intValue(); int val2 = o2.intValue(); if (val1 % 2 == 1 && val2 % 2 == 0){ return -1; }else if (val1 % 2 == 0 && val2 % 2 == 1) { return 1; } return o1.compareTo(o2); } }; // ソート前のリストの中身を表示する System.out.println("・ソート前"); System.out.println(list3); // ソートを実行 Collections.sort(list3, comp); //ソート前のリストの中身を表示する System.out.println("・ソート後"); System.out.println(list3); } // リストの初期化を行うメソッド static void setElement(List<Integer> list) { // リストに要素を設定 list3.add(Integer.valueOf(180)); list3.add(Integer.valueOf(551)); list3.add(Integer.valueOf(207)); list3.add(Integer.valueOf(162)); list3.add(Integer.valueOf(183)); list3.add(Integer.valueOf(64)); } } |
出力結果
自作のルールでソートする
・ソート前
[180, 551, 207, 162, 183, 64]
・ソート後
[183, 207, 551, 64, 162, 180]
今回のポイント
sortでリストの要素の並び替える
リストの要素をソートするにはCollectionsクラスのsortメソッドを使用する
⚫︎ >Collectionsクラスのsortメソッドでリストの要素をソートする
⚫︎ パラメータとして対象のリストだけを渡すと、自然順序付け(昇順)でソートを行う
⚫︎ 配列の要素を降順に並び替えるに第二パラメータにCollectionsクラスのreverseOrderメソッドを指定する
⚫︎ 自分でソートのルールを決める場合は、「Comparator」インタフェースを実装したクラスを用意する
(サンプルコードでは、奇数だけでソートし、次に偶数だけでソートするルールを作成している)
関連記事
配列の要素をソートする方法ついてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。