Riepilogo - Ordinamento personalizzato
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 46 di 87.
Sfida
FacileCreiamo un gestore di raccolte di libri che riunisce tutto ciò che hai imparato sui metodi speciali e sull'ordinamento. Creerai una classe Book con toString(), equals(), hashCode() implementati correttamente e ordinamento naturale tramite Comparable, oltre a comparatori esterni per opzioni di ordinamento flessibili.
Organizzerai il codice in quattro file:
Book.java: crea una classe che rappresenti un libro con tre campi privati:title(String),author(String) eyear(int). Includi un costruttore e getter per tutti i campi.La tua classe Book dovrebbe implementare
Comparable<Book>con ordinamento naturale peryearin ordine crescente (dal più vecchio al più recente).Sovrascrivi
toString()in modo che restituisca:[title] by [author] ([year])Sovrascrivi
equals()in modo che due libri siano uguali quando hanno lo stessotitleEauthor. SovrascrivihashCode()usandoObjects.hash()con gli stessi campi.TitleComparator.java: crea un comparatore che ordini alfabeticamente i libri per titolo in ordine crescente (dalla A alla Z).AuthorComparator.java: crea un comparatore che ordini alfabeticamente i libri per autore in ordine crescente (dalla A alla Z).Main.java: metti insieme tutto! Riceverai i dati di tre libri in input, ciascuno su una riga separata, nel formato:title,author,yearCrea un
ArrayListdi libri e mostra tutti e tre i metodi di ordinamento:- Ordina usando l'ordinamento naturale (per anno) e stampa ciascun libro
- Stampa una riga vuota
- Ordina per titolo usando
TitleComparatore stampa ciascun libro - Stampa una riga vuota
- Ordina per autore usando
AuthorComparatore stampa ciascun libro
Riceverai tre righe di input, ciascuna contenente i dati di un libro nel formato: title,author,year
Per esempio: 1984,George Orwell,1949
Ricordati di importare java.util.Objects in Book.java, java.util.Comparator nei file dei comparatori e java.util.ArrayList, java.util.Collections e java.util.Scanner in Main.java.
Provalo tu
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);
// Leggi tre libri dall'input
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: Analizza ogni riga per estrarre titolo, autore e anno
// Suggerimento: usa split(",") per separare i valori
// TODO: Crea oggetti Book dai dati estratti
// TODO: Crea un ArrayList e aggiungi tutti e tre i libri
// TODO: Ordina secondo l'ordinamento naturale (per anno) e stampa ogni libro
// TODO: Stampa una riga vuota
// TODO: Ordina per titolo usando TitleComparator e stampa ogni libro
// TODO: Stampa una riga vuota
// TODO: Ordina per autore usando AuthorComparator e stampa ogni libro
}
}Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online