Ô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.
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 theoyear, 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ùngtitleVÀauthor. Ghi đèhashCode()bằngObjects.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,yearTạo một
ArrayListgồm các cuốn sách và minh họa cả ba cách sắp xếp:- Sắp xếp theo thứ tự tự nhiên (theo năm) rồi in ra từng cuốn sách
- In ra một dòng trống
- Sắp xếp theo tiêu đề bằng
TitleComparatorrồi in ra từng cuốn sách - In ra một dòng trống
- Sắp xếp theo tác giả bằng
AuthorComparatorrồ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
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online