Resumen - Ordenamiento personalizado
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 46 de 87.
Desafío
Fácil¡Vamos a construir un gestor de colección de libros que reúna todo lo que has aprendido sobre métodos especiales y ordenación! Crearás una clase Book con los métodos toString(), equals(), hashCode() adecuados y un orden natural a través de Comparable, además de comparadores externos para opciones de ordenación flexibles.
Organizarás tu código en cuatro archivos:
Book.java: Crea una clase que represente un libro con tres campos privados:title(String),author(String) yyear(int). Incluye un constructor y getters para todos los campos.Tu Book debe implementar
Comparable<Book>con un orden natural poryearen orden ascendente (el más antiguo primero).Sobrescribe
toString()para que devuelva:[title] by [author] ([year])Sobrescribe
equals()para que dos libros sean iguales cuando tengan el mismotitleY el mismoauthor. SobrescribehashCode()usandoObjects.hash()con los mismos campos.TitleComparator.java: Crea un comparador que ordene los libros alfabéticamente por título en orden ascendente (de la A a la Z).AuthorComparator.java: Crea un comparador que ordene los libros alfabéticamente por autor en orden ascendente (de la A a la Z).Main.java: ¡Reúnelo todo! Recibirás la entrada de tres libros, cada uno en una línea separada con el formato:title,author,yearCrea un
ArrayListde libros y demuestra los tres enfoques de ordenación:- Ordena usando el orden natural (por año) e imprime cada libro
- Imprime una línea vacía
- Ordena por título usando
TitleComparatore imprime cada libro - Imprime una línea vacía
- Ordena por autor usando
AuthorComparatore imprime cada libro
Recibirás tres líneas de entrada, cada una con los datos de un libro en el formato: title,author,year
Por ejemplo: 1984,George Orwell,1949
Recuerda importar java.util.Objects en Book.java, java.util.Comparator en tus archivos de comparadores, y java.util.ArrayList, java.util.Collections y java.util.Scanner en Main.java.
Pruébalo tú mismo
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);
// Leer tres libros de la entrada
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: Analizar cada línea para extraer el título, el autor y el año
// Sugerencia: Usar split(",") para separar los valores
// TODO: Crear objetos Book a partir de los datos analizados
// TODO: Crear un ArrayList y añadir los tres libros
// TODO: Ordenar usando el orden natural (por año) e imprimir cada libro
// TODO: Imprimir una línea vacía
// TODO: Ordenar por título usando TitleComparator e imprimir cada libro
// TODO: Imprimir una línea vacía
// TODO: Ordenar por autor usando AuthorComparator e imprimir cada libro
}
}Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Iterator