まとめ - カスタムソート
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 46/87。
チャレンジ
簡単これまで学んだ特殊メソッドとソートに関する知識をすべて統合した、蔵書管理マネージャーを作成しましょう。Bookクラスを作成し、適切なtoString()、equals()、hashCode()、およびComparableによる自然順序付けを実装します。さらに、柔軟なソートオプションのために外部コンパレータも作成します。
コードは以下の4つのファイルに分けて構成します:
Book.java: 3つのプライベートフィールド、title(String)、author(String)、year(int)を持つブッククラスを作成します。コンストラクタとすべてのフィールドのゲッターを含めてください。Bookクラスは
Comparable<Book>を実装し、yearによる昇順(古い順)を自然順序とします。toString()をオーバーライドして、[title] by [author] ([year])を返すようにします。equals()をオーバーライドして、titleとauthorが両方とも同じ場合に2つの本が等しいとみなされるようにします。同じフィールドを使用してObjects.hash()でhashCode()をオーバーライドします。TitleComparator.java: タイトルのアルファベット順(AからZ)で昇順にソートするコンパレータを作成します。AuthorComparator.java: 著者のアルファベット順(AからZ)で昇順にソートするコンパレータを作成します。Main.java: すべてを統合します!3冊の本の入力を受け取ります。各行はtitle,author,yearの形式です。本の
ArrayListを作成し、以下の3つのソート方法をすべて実演してください:- 自然順序(発行年順)でソートし、各本を出力する
- 空行を出力する
TitleComparatorを使用してタイトル順でソートし、各本を出力する- 空行を出力する
AuthorComparatorを使用して著者順でソートし、各本を出力する
入力として、title,author,yearの形式で本のデータが含まれる3行を受け取ります。
例:1984,George Orwell,1949
Book.javaではjava.util.Objectsを、コンパレータファイルではjava.util.Comparatorを、Main.javaではjava.util.ArrayList、java.util.Collections、java.util.Scannerをインポートすることを忘れないでください。
自分で試してみよう
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 入力から3冊の本を読み込む
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: 各行を解析して、タイトル、著者、出版年を抽出する
// ヒント: 値を分割するために split(",") を使用する
// TODO: 解析されたデータから Book オブジェクトを作成する
// TODO: ArrayList を作成し、3冊すべての本を追加する
// TODO: 自然順序(出版年順)でソートし、各本を出力する
// TODO: 空行を出力する
// TODO: TitleComparator を使用してタイトル順にソートし、各本を出力する
// TODO: 空行を出力する
// TODO: AuthorComparator を使用して著者順にソートし、各本を出力する
}
}オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造7特殊メソッドとObjectクラス
toString() メソッドequals() と hashCode()clone() メソッドcompareTo() と ComparableComparator インターフェースまとめ - カスタムソート