こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- sortメソッドを使ってみたい方
sortメソッドの使い方
ArrayListはsortメソッドを使用してソートすることができます。
sortメソッドには引数にコンパレータというものを使用します。
コンパレータとは並び替えに使う比較するメソッドを持っているオブジェクトです。
コンパレータはインターフェースを使用します。
2種類あり、それぞれソートの対象が異なります。
- Comparator・・・任意のクラスが対象
- Comparable・・・自分自身が対象
Comparatorはオブジェクトを作成して引数に渡して使い、
Comparableはソートしたいクラスに実装して使用します。
Comparatorの使い方
Comparatorインターフェースを実装したクラスからインスタンスを作成し、
sortメソッドに渡して使用します。
Comparatorインターフェースはcompareメソッドが定義されています。
compareメソッドをオーバライドしてソート方法を記述します。
インスタンスの作成方法は2つあります。
- Comparatorインターフェースを実装したクラスからインスタンスを作成
- ラムダ式を使用してインスタンスを作成
ここではラムダ式を使用したインスタンスの作成方法を説明します。
Comparatorサンプルプログラム
実行結果
Member [name=井上, age=52]
Member [name=佐藤, age=22]
Member [name=田中, age=44]
========================
Member [name=佐藤, age=22]
Member [name=田中, age=44]
Member [name=井上, age=52]
Memberクラスのインスタンスが格納されたリストを作成します。
Comparatorのインスタンスは2種類作成しています。
- Memberクラスの名前(name)を昇順でソート
- Memberクラスの年齢(age)を昇順でソート
Comparatorは総称型です。
今回はMember型のインスタンスをソートしたいのでMemberと記述しています。
名前(文字列)の比較にはStringクラスのcompareToメソッドを使用しています。
年齢(数値)の比較にはIntegerクラスのcompareメソッドを使用しています。
これらは決まり文句として暗記しましょう。
Comparableの使い方
Comparableインターフェースを実装し、compareToメソッドをオーバライドして使用します。
オーバライドは、
基本的にはthisを使用した自分自身と引数のオブジェクトから取得した値で比較します。
Comparableサンプルプログラム
実行結果
Member_1 [name=井上, age=52]
Member_1 [name=佐藤, age=22]
Member_1 [name=田中, age=44]
Collectionsクラスのsortメソッドを使用してソートしています。