Javaでリストをソートする方法
時々、リストの要素を処理する前にJavaでリストをソートする必要があります。このチュートリアルでは、自然な順序でリストをソートする方法について学びます。また、オブジェクトのリストをソートするために独自のComparator実装を使用する方法も学びます。Javaのリストは、配列と似ていますが、リストの長さが動的であり、Javaのコレクションフレームワークに含まれています。実際、リストはインターフェースであり、ほとんどの場合、ArrayListやLinkedListなどの実装の1つを使用します。
Javaのリストを並べ替える
ここでは、Javaでオブジェクトのリストをソートする方法を学びます。リストを自然な昇順でソートするためには、Collections.sort()メソッドを使用することができます。リストのすべての要素はComparableインターフェースを実装している必要があります。そうでない場合、IllegalArgumentExceptionがスローされます。文字列のリストをソートする簡単な例を見てみましょう。
package com.scdev.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class JavaListSort {
/**
* This class shows how to sort ArrayList in java
* @param args
*/
public static void main(String[] args) {
List<String> strList = new ArrayList<String>();
strList.add("A");
strList.add("C");
strList.add("B");
strList.add("Z");
strList.add("E");
//using Collections.sort() to sort ArrayList
Collections.sort(strList);
for(String str: strList) System.out.print(" "+str);
}
}
私たちがCollections.sort()メソッドを使用して文字列のリストをソートしていることがわかります。StringクラスはComparableインターフェースを実装しています。出力:
Javaのオブジェクトのリストをソートする。
別の例を見てみましょう。カスタムオブジェクトのリストを並び替える場合を考えます。ただし、クラスはComparableインターフェースを実装する必要があります。
package com.scdev.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class JavaSortListObject {
public static void main(String[] args) {
List<Data> dl = new ArrayList<>();
dl.add(new Data(2));
dl.add(new Data(3));
dl.add(new Data(1));
System.out.println("Original List::"+dl);
Collections.sort(dl);
System.out.println("Naturally Sorted List::"+dl);
}
}
class Data implements Comparable<Data> {
private int id;
public Data(int i) {
this.id = i;
}
@Override
public int compareTo(Data d) {
return this.id - d.getId();
}
public int getId() {
return id;
}
@Override
public String toString() {
return "Data{"+this.id+"}";
}
}
出力:
Original List::[Data{2}, Data{3}, Data{1}]
Naturally Sorted List::[Data{1}, Data{2}, Data{3}]
JavaでComparatorを使用してリストをソートする。
Collections.sort()メソッドはオーバーロードされており、ソートのルールを指定するために独自のComparator実装を提供することもできます。Comparatorは関数型インターフェースであるため、ラムダ式を使用してその実装を1行で記述することができます。
Collections.sort(dl, (d1, d2) -> {
return d2.getId() - d1.getId();
});
System.out.println("Reverse Sorted List using Comparator::" + dl);
出力:
要約すると、日本語でネイティブに言い換えると、以下のようになります。ただし、1つのオプションのみです。
要約:
Collectionsクラスのsort()メソッドは、Javaでリストをソートするために使用されます。リストの要素がComparableインターフェースを実装する必要がある場合、自然な順序でリストをソートすることができます。また、ソートのルールを定義するためにComparatorの実装を渡すこともできます。
わたしたちのGitHubリポジトリから、さらに多くの例をチェックアウトすることができます。
参考: APIドキュメント