Podsumowanie — własne sortowanie
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 46 z 87.
Wyzwanie
ŁatwyStwórzmy menedżer kolekcji książek, który łączy wszystko, czego nauczyłeś się o metodach specjalnych i sortowaniu. Utworzysz klasę Book z odpowiednimi metodami toString(), equals(), hashCode() oraz naturalnym porządkiem określonym przez Comparable, a także zewnętrznymi komparatorami umożliwiającymi elastyczne sortowanie.
Podzielisz swój kod na cztery pliki:
Book.java: Utwórz klasę reprezentującą książkę z trzema prywatnymi polami:title(String),author(String) iyear(int). Dodaj konstruktor i metody pobierające wartości wszystkich pól.Twoja klasa Book powinna implementować
Comparable<Book>z naturalnym porządkiem wedługyearw kolejności rosnącej (najpierw najstarsze książki).Nadpisz
toString(), aby zwracała:[title] by [author] ([year])Nadpisz
equals(), aby dwie książki były równe, gdy mają taki samtitleORAZauthor. NadpiszhashCode(), używającObjects.hash()z tymi samymi polami.TitleComparator.java: Utwórz komparator, który sortuje książki alfabetycznie według tytułu w kolejności rosnącej (od A do Z).AuthorComparator.java: Utwórz komparator, który sortuje książki alfabetycznie według autora w kolejności rosnącej (od A do Z).Main.java: Połącz wszystko w całość! Otrzymasz dane wejściowe dla trzech książek, każdą w osobnym wierszu, w formacie:title,author,yearUtwórz
ArrayListksiążek i zaprezentuj wszystkie trzy sposoby sortowania:- Posortuj według naturalnego porządku (według roku) i wypisz każdą książkę
- Wypisz pusty wiersz
- Posortuj według tytułu, używając
TitleComparator, i wypisz każdą książkę - Wypisz pusty wiersz
- Posortuj według autora, używając
AuthorComparator, i wypisz każdą książkę
Otrzymasz trzy wiersze danych wejściowych, z których każdy zawiera dane książki w formacie: title,author,year
Na przykład: 1984,George Orwell,1949
Pamiętaj, aby zaimportować java.util.Objects w pliku Book.java, java.util.Comparator w plikach komparatorów oraz java.util.ArrayList, java.util.Collections i java.util.Scanner w pliku Main.java.
Spróbuj swoich sił
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);
// Wczytaj trzy książki z danych wejściowych
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: Przeanalizuj każdą linię, aby wyodrębnić tytuł, autora i rok
// Wskazówka: Użyj split(",") do rozdzielenia wartości
// TODO: Utwórz obiekty Book na podstawie przeanalizowanych danych
// TODO: Utwórz ArrayList i dodaj do niej wszystkie trzy książki
// TODO: Posortuj według naturalnego porządku (według roku) i wypisz każdą książkę
// TODO: Wypisz pustą linię
// TODO: Posortuj według tytułu za pomocą TitleComparator i wypisz każdą książkę
// TODO: Wypisz pustą linię
// TODO: Posortuj według autora za pomocą AuthorComparator i wypisz każdą książkę
}
}Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online