Menu
Coddy logo textTech

まとめ - カスタムソート

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 46/87。

challenge icon

チャレンジ

簡単

これまで学んだ特殊メソッドとソートに関する知識をすべて統合した、蔵書管理マネージャーを作成しましょう。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()をオーバーライドして、titleauthorが両方とも同じ場合に2つの本が等しいとみなされるようにします。同じフィールドを使用してObjects.hash()hashCode()をオーバーライドします。

  • TitleComparator.java: タイトルのアルファベット順(AからZ)で昇順にソートするコンパレータを作成します。
  • AuthorComparator.java: 著者のアルファベット順(AからZ)で昇順にソートするコンパレータを作成します。
  • Main.java: すべてを統合します!3冊の本の入力を受け取ります。各行はtitle,author,yearの形式です。

    本のArrayListを作成し、以下の3つのソート方法をすべて実演してください:

    1. 自然順序(発行年順)でソートし、各本を出力する
    2. 空行を出力する
    3. TitleComparatorを使用してタイトル順でソートし、各本を出力する
    4. 空行を出力する
    5. AuthorComparatorを使用して著者順でソートし、各本を出力する

入力として、title,author,yearの形式で本のデータが含まれる3行を受け取ります。

例:1984,George Orwell,1949

Book.javaではjava.util.Objectsを、コンパレータファイルではjava.util.Comparatorを、Main.javaではjava.util.ArrayListjava.util.Collectionsjava.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 を使用して著者順にソートし、各本を出力する
    }
}

オブジェクト指向プログラミングのすべてのレッスン