Menu
CoddyTech

Ôn tập: sắp xếp tùy chỉnh

Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 46 trên 87.

challenge icon

Thử thách

Dễ

Hãy xây dựng trình quản lý bộ sưu tập sách, kết hợp mọi thứ bạn đã học về các phương thức đặc biệt và sắp xếp. Bạn sẽ tạo một lớp Book với các phương thức toString(), equals(), hashCode() phù hợp và thứ tự tự nhiên thông qua Comparable, cùng các bộ so sánh bên ngoài để có nhiều tùy chọn sắp xếp linh hoạt.

Bạn sẽ sắp xếp code trong bốn tệp:

  • Book.java: Tạo một lớp đại diện cho sách với ba trường private: title (String), author (String) và year (int). Thêm hàm khởi tạo và getter cho tất cả các trường.

    Lớp Book cần triển khai Comparable<Book> với thứ tự tự nhiên theo year, theo thứ tự tăng dần (sách cũ nhất trước).

    Ghi đè toString() để trả về: [title] by [author] ([year])

    Ghi đè equals() để hai cuốn sách bằng nhau khi chúng có cùng title VÀ author. Ghi đè hashCode() bằng Objects.hash() với cùng các trường đó.

  • TitleComparator.java: Tạo một bộ so sánh sắp xếp sách theo thứ tự bảng chữ cái dựa trên tiêu đề, theo thứ tự tăng dần (từ A đến Z).
  • AuthorComparator.java: Tạo một bộ so sánh sắp xếp sách theo thứ tự bảng chữ cái dựa trên tác giả, theo thứ tự tăng dần (từ A đến Z).
  • Main.java: Kết hợp mọi thứ! Bạn sẽ nhận đầu vào gồm ba cuốn sách, mỗi cuốn trên một dòng riêng theo định dạng: title,author,year

    Tạo một ArrayList gồm các cuốn sách và minh họa cả ba cách sắp xếp:

    1. Sắp xếp theo thứ tự tự nhiên (theo năm) rồi in ra từng cuốn sách
    2. In ra một dòng trống
    3. Sắp xếp theo tiêu đề bằng TitleComparator rồi in ra từng cuốn sách
    4. In ra một dòng trống
    5. Sắp xếp theo tác giả bằng AuthorComparator rồi in ra từng cuốn sách

Bạn sẽ nhận ba dòng đầu vào, mỗi dòng chứa thông tin sách theo định dạng: title,author,year

Ví dụ: 1984,George Orwell,1949

Nhớ import java.util.Objects trong Book.java, java.util.Comparator trong các tệp bộ so sánh, và java.util.ArrayList, java.util.Collections cùng java.util.Scanner trong Main.java.

Tự làm thử

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);
        
        // Đọc thông tin ba cuốn sách từ đầu vào
        String line1 = scanner.nextLine();
        String line2 = scanner.nextLine();
        String line3 = scanner.nextLine();
        
        // TODO: Phân tích từng dòng để lấy tên sách, tác giả và năm xuất bản
        // Gợi ý: Dùng split(",") để tách các giá trị
        
        // TODO: Tạo các đối tượng (object) Book từ dữ liệu đã phân tích
        
        // TODO: Tạo một ArrayList và thêm cả ba cuốn sách vào
        
        // TODO: Sắp xếp theo thứ tự tự nhiên (theo năm) và in ra từng cuốn sách
        
        // TODO: In ra một dòng trống
        
        // TODO: Dùng TitleComparator để sắp xếp theo tên sách và in ra từng cuốn sách
        
        // TODO: In ra một dòng trống
        
        // TODO: Dùng AuthorComparator để sắp xếp theo tác giả và in ra từng cuốn sách
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Java online