El comparador es una interfaz, que puede anular los dos métodos de comparación () e igual () para la función de comparación de precios; Si es nulo, utiliza el orden predeterminado de elementos, como A, B, C, D, E, F, G, es decir, A, B, C, D, E, F, G, por supuesto, lo mismo es cierto para los números.
Compare (a, b) método: devuelve entero negativo, cero o entero positivo de acuerdo con el primer parámetro, que es menor que, igual o mayor que el segundo parámetro.
Método igual (obj): return true solo si el objeto especificado también es un comparador y el mismo tipo que este comparador se ve obligado a implementarse.
El segundo parámetro de colección.sort (lista, new PricecomParator ()); Devuelve un valor de tipo int, que es equivalente a un indicador, que dice el método de clasificación en qué orden ordenar la lista.
El método de código de implementación específico es el siguiente:
Clase de entidad del libro:
paquete com.tjcyjd.comparator; import java.text.DecimalFormat; import java.text.simpledateFormat; import java.util.gregoriancalendar; import java.util.iterator; import java.util.Treemap; / ** * Clase de entidad de libro * * @author yjd * */ public class Book implementos comparables {// Defina un libro con nombre de clase, que se hereda de forma predeterminada desde la clase de objeto public int id; // número de cadena pública nombre de cadena; // Nombre de doble precio público; // Precio de cadena privada Autor; // Autor Public Gregoriancalendar Calendar; // Publication Date Public Book () {this (0, "X", 0.0, New Gregoriancalendar (), ""); } Libro público (int id, nombre de cadena, doble precio, calendario Gregoriancalendar, autor de cadena) {this.id = id; this.name = name; this.price = precio; this.calendar = calendario; this.author = autor; } // Reescribe el método heredado del objeto de clase principal para cumplir con los requisitos de la información de la clase de libro Descripción public String toString () {String showStr = id + "/t" + nombre; // Definir la cadena que muestra la información de clase DecimalFormat FormatPrice = new DecimalFormat ("0.00"); // Price de formato a dos decimales Showstr + = "/t" + FormatPrice.format (precio); // Formato Price Price Showstr + = "/T" + Author; SimpleDateFormat FormatDate = new SimpleDateFormat ("Yyyy Year mm mes dd Day"); showstr + = "/t" + formatDate.format (calendar.gettime ()); // Formato de retorno de tiempo showstr; // devuelve la cadena de información de la clase} public int Compareto (object obj) {// método en interfaz comparable Book b = (libro) obj; devolver esto.id - b.id; // Compare el tamaño según la identificación del libro, utilizado para la clasificación predeterminada} public static void main (String [] args) {Libro B1 = nuevo libro (10000, "Sueño de la cámara roja", 150.86, nuevo Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Libro B2 = Nuevo libro (10001, "Romance of the Three Kingdoms", 99.68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Libro B3 = Nuevo libro (10002, "Margen de agua", 100.8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Libro B4 = Nuevo libro (10003, "Journey to the West", 120.8, New Gregoriancalendar (2011, 6, 8), "Wu Cheng'en"); Libro B5 = Nuevo libro (10004, "La leyenda de los cóndor héroes", 10.4, new Gregoriancalendar (2011, 9, 23), "Sohu"); Treemap tm = new Treemap (); tm.put (B1, nuevo entero (255)); tm.put (B2, nuevo entero (122)); tm.put (B3, nuevo entero (688)); tm.put (B4, nuevo entero (453)); tm.put (B5, nuevo entero (40)); Iterador it = tm.keySet (). Iterator (); Key de objeto = nulo, valor = nulo; Libro bb = nulo; while (it.hasnext ()) {key = it.next (); BB = (Libro) clave; valor = tm.get (clave); System.out.println (bb.ToString () + "/t inventario:" + tm.get (key)); }}} Clases de comparación y prueba personalizadas:
paquete com.tjcyjd.comparator; import java.util.arrayList; import java.util.collections; importar java.util.comparator; import java.util.gregoriancalendar; import java.util.iterator; import java.util.list; clase pública usecomparator {public static void main (string args []) {list <Book> list = new ArrayList <Book> (); // Libro de secuencia de matriz B1 = nuevo libro (10000, "Dream of Red Mansions", 150.86, New Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Libro B2 = Nuevo libro (10001, "Romance of the Three Kingdoms", 99.68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Libro B3 = Nuevo libro (10002, "Margen de agua", 100.8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Libro B4 = Nuevo libro (10003, "Journey to the West", 120.8, New Gregoriancalendar (2011, 6, 8), "Wu Chengen"); Libro B5 = nuevo libro (10004, "Tianlong Baba", 10.4, New Gregoriancalendar (2011, 9, 23), "Sohu"); list.add (B1); list.add (B2); list.add (B3); list.add (b4); list.add (B5); // colección.sort (lista); // No hay un comparador predeterminado, System.out.println ("Elementos en una secuencia de matriz:"); myprint (lista); Colección.sort (lista, nuevo Pricecomparator ()); // Ordenar por precio System.out.println ("Ordenado por el precio del libro:"); myprint (lista); Colección.sort (lista, nuevo calendarcomparator ()); // Ordenar por tiempo System.out.println ("Ordenado por el libro Public static void myprint (List <Book> list) {iterator it = list.iterator (); // Obtener un iterador para atravesar todos IT.NEXT ()); // Mostrar este elemento}} // Comparador personalizado: Ordena por el precio del libro Pricecomparator de la clase estática implementa el comparador {public int Compare (Object Object1, Object2) {// Implementar el método en el libro de interfaz P1 = (Libro) Object1; Double (P2.Price)); En el libro de interfaz P1 = (libro) Object1; // Libro de casting P2 = (Libro) Object2; return p2.calendar.compareto (p1.calendar); }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.