オブジェクトの比較
前回は、オブジェクトの同一性を示すためにequals()メソッドのオーバーライドを作成した。今回は、異なるオブジェクトの順序付けに関する実装を行う。
ソートとComparator
オブジェクトをソートするには、オブジェクトを比較する仕組みが必要。そのためのインタフェースが Comparator。
Comparatorは比較のためのメソッド compare()を定義している。
int compare(T o1, T o2) パラメータ: o1 - 比較対象の最初のオブジェクト o2 - 比較対象の 2 番目のオブジェクト 戻り値: 最初の引数が 2 番目の引数より小さい場合は負の整数、両方が等しい場合は 0、最初の引数が 2 番目の引数より大きい場合は正の整数 例外: ClassCastException - 引数の型がこのコンパレータによる比較を妨げる場合
テキストの例題を入力して動かしてみる
テキストでは同一ファイル内にComparatorを作成しているが、実際には別ファイルで作成すること。
独自クラスに対して実装してみる
タイトル、作者、作成日、ファイルサイズ、長さ(時間)の5つの属性を持つ Media クラスを作成して、それを比較するための Comparator を実装する。
Eclipseで簡単にクラス Media を作成する手順。
- 新規クラスでMediaを作成する。
- 5つのインスタンス変数を定義する。
- Eclipseの「ソース」メニューから「setter/getterの生成」を選択する。
- 生成する属性にチェックを入れて「OK」する。
Media のタイトルを比較するための MediaTitleComparator を作成する。クラスを作成するときにインタフェース Comparator を追加しておくこと。
MediaTitleComparator を右クリックして新規JUnitテストケースを作成する。テストメソッドは compare() を選択して「完了」する。
テストが生成されたら、テストを実行して失敗することを確認する。
タイトルを比較するテストを追加する。