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 Sort List

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);

出力:

Java Sort List Objects Comparator

要約すると、日本語でネイティブに言い換えると、以下のようになります。ただし、1つのオプションのみです。

要約:

Collectionsクラスのsort()メソッドは、Javaでリストをソートするために使用されます。リストの要素がComparableインターフェースを実装する必要がある場合、自然な順序でリストをソートすることができます。また、ソートのルールを定義するためにComparatorの実装を渡すこともできます。

わたしたちのGitHubリポジトリから、さらに多くの例をチェックアウトすることができます。

参考: APIドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *