Cuando la colección o matriz que debe ordenarse no es un tipo numérico simple, generalmente puede usar comparador o comparable para implementar la clasificación de objetos o la clasificación personalizada de una manera simple.
Una función de comparación, que impone un orden total en alguna colección de objetos. Los comparadores se pueden pasar a un método de clasificación (como colección. Sesto o matriz.sort) para permitir un control preciso sobre el orden de clasificación. Los comparadores también se pueden utilizar para controlar el orden de ciertas estructuras de datos (como conjuntos ordenados o mapas ordenados), o para proporcionar un pedido de colecciones de objetos que no tienen un pedido natural. ------ API
Puede ordenar la lista de cadenas directamente porque el objeto de cadena nos ha ayudado a implementar la interfaz comparable, por lo que si nuestra persona quiere clasificar, también necesitamos implementar un comparador.
1. Comparador
Ordenar objetos almacenados en LinkedList
import java.util.comparator; import java.util.linkedlist; persona de clase {altura de flotación privada; nombre de cadena privada; Persona (altura de flotación) {this.height = altura; } public float getheight () {altura de retorno; } public void setheight (altura de float) {this.height = altura; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }} clase PersonHeight implementa Comparador <Oll> {@Override // Reescribe el método de comparación, return <0 permanece sin cambios, return> 0 se intercambia en secuencia (mantenga el orden ascendente) público en comparación (persona e1, persona e2) {if (e1.getheight () <e2.getheight ()) {return 1; } else {return -1; }}} Public Class Pregunta3 {public static void main (string [] args) {persona p1 = nueva persona (23.4f); p1.setName ("stud1"); Persona P2 = nueva persona (2.34f); p2.setName ("stud2"); Persona p3 = nueva persona (34.32f); p3.setName ("stud3"); Persona P4 = nueva persona (56.45f); p4.setName ("stud4"); Persona p5 = nueva persona (21.4f); p5.setName ("stud5"); LinkedList <Oller> AL = new LinkedList <OlPER> (); Al.add (P1); Al.add (P2); Al.add (P3); Al.add (P4); Al.add (P5); // llame al método de clasificación para implementar colecciones de clasificación.sort (AL, new PersonHeight ()); // Transipa la salida para (Person P: AL) System.out.println (p.getName ()); }}
Adjunto:
// Ordenar la fecha/*** Si O1 es inferior a O2, devuelve un número negativo; Si O1 es mayor que O2, devuelva un número positivo; Si son iguales, regrese 0; */@OverridePublic int compare (paso O1, paso O2) {date aceptación1e1 = utililTool.strtodate (o1.getAccepttime (), null); Fecha aceptación de aceptación2 = utililTool.strtodate (o2.getaccepttime (), null); // ascendiendo el campo Fechas, si desea descender, puede usar el método anterior si (aceptarTime1.Aspcter (AcceptTime2)) return 1; return -1;}2. Comparable
import java.util.collections; import java.util.comparator; import java.util.linkedList; la persona de clase implementa comparable {altura de flotación privada; nombre de cadena privada; Persona (altura de flotación) {this.height = altura; } public float getheight () {altura de retorno; } public void setheight (altura de float) {this.height = altura; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } @Override public int Compareto (Object o) {// TODO Auto Generated Method Stub if (this.height> ((persona) o) .Height) {return 1; } else return -1; }} Public Class Pregunta3 {public static void main (string [] args) {persona p1 = nueva persona (23.4f); p1.setName ("stud1"); Persona P2 = nueva persona (2.34f); p2.setName ("stud2"); Persona p3 = nueva persona (34.32f); p3.setName ("stud3"); Persona P4 = nueva persona (56.45f); p4.setName ("stud4"); Persona p5 = nueva persona (21.4f); p5.setName ("stud5"); LinkedList <Oller> AL = new LinkedList <OlPER> (); Al.add (P1); Al.add (P2); Al.add (P3); Al.add (P4); Al.add (P5); Colección.sort (AL); para (persona P: AL) System.out.println (p.getName ()); }}Tres. Comparación
Comparable se define dentro de la clase de persona .
El comparador se define fuera de la persona. En este momento, la estructura de nuestra clase de persona no necesita cambiar.
Los dos métodos tienen sus propias ventajas y desventajas. Es simple de usar comparable. Mientras el objeto que implementa la interfaz comparable se convierta en un objeto comparable, requiere modificar el código fuente. La ventaja de usar el comparador es que no requiere modificar el código fuente, sino implementar un comparador. Cuando se necesita comparar un objeto personalizado, puede comparar el tamaño pasando el comparador y el objeto juntos. En comparador, los usuarios pueden implementar una lógica compleja y general por sí mismos, para que puedan coincidir con algunos objetos relativamente simples, lo que puede ahorrar mucho trabajo repetitivo.