Introducción comparable
Comparable es la interfaz de clasificación.
Si una clase implementa la interfaz comparable, significa "esta clase admite la clasificación". Dado que las clases que implementan la clasificación de la interfaz comparable, suponiendo que ahora hay una "lista de listas (o matriz) de objetos de clases que implementan una interfaz comparable", la lista de listas (o matriz) puede clasificarse mediante colección.sort (o arrays.sort).
Además, "objeto de la clase que implementa la interfaz comparable" se puede usar como clave en el "mapa ordenado (como Treemap)" o un elemento en el "conjunto ordenado (TreeSet)" sin especificar un comparador.
1. Comparador y comparable son los mismos
Todos son interfaces Java y se utilizan para comparar tamaños de clases personalizadas.
¿Qué es una clase personalizada? Como la persona de clase pública {nombre de cadena; int Age}.
Cuando tenemos una lista de personas así, que contiene persona1, persona2, persona3 ......, usamos colecciones.
El resultado esperado no se obtiene. Alguien debe preguntar en este momento, ¿por qué podemos ordenar una lista de cadenas:
Por ejemplo, StringList {"Hello1", "Hello3", "Hello2"}, Collections.sort (StringList) puede obtener la clasificación correcta, eso es porque
El objeto String nos ha ayudado a implementar la interfaz comparable, por lo que si nuestra persona quiere clasificar, también necesitamos implementar un comparador.
2. La diferencia entre comparador y comparable
Comparable
Comparable se define dentro de la clase de persona:
La clase pública Persion implementa comparable {..Compare el tamaño de la persona ...},
Debido a que el comparador se ha implementado, nuestra persona ahora es un objeto que puede comparar los tamaños. Su función de comparación es exactamente la misma que la cadena, y se puede comparar en cualquier momento y en cualquier lugar, porque la persona ahora tiene un tamaño diferente. Collections.Sort (Personlist) puede obtener el resultado correcto.
Comparador
El comparador se define fuera de la persona. En este momento, la estructura de nuestra clase de persona no necesita cambiar ningún cambio, como
Persona de clase pública {nombre de cadena; int Age},Luego definimos otro comparador:
Public PersonComparator implementa comparador () {..Compare el tamaño de la persona ...}, Cómo comparar los tamaños de dos personas en Person Comparator. Entonces, usando este método, cuando queremos clasificar una lista de personas,
Además de pasar la lista de personas, también necesitamos pasar el Comparador de Personas, porque cómo comparar el tamaño de la persona está en Person Comparator
Implementado en, como:
Colección.sort (Personlist, New PersonComparator ()).
3. Ejemplos de comparador y comparable
Comparable:
Para implementar la interfaz comparable, debe anular el método Compareto. Implementar la comparación en el método Compareto:
La persona de clase pública implementa comparable {String Name; int Age; public int Compareto (persona otra) {int i = 0; i = name.compareto (otro.name); // Comparación usando cadenas if (i == 0) {// Si los nombres son los mismos, comparar la edad, retorno de la edad Resultado de retorno Age - otro.age;} else {return i; // Los nombres son diferentes, devuelve el resultado de comparar nombres.}}}En este momento, podemos ordenarlo directamente con Collections.Sort (Person Lista).
Comparador:
La implementación del comparador requiere anular el método de comparación:
Public Class Person {String Name; int Age;} Class PersonComparator implementa el Comparador <Oll> {public int Compare (Person One, Person Other) {int i = 0; i = One.name.compareto (otro.name); // Comparación usando cadenas if (i == 0) {// Si el nombre es el mismo, compare la edad, devuelva el resultado de la comparación de devolución de edad uno.age - otro.age;} else {return i; // Los nombres son diferentes, devuelven el resultado de comparar nombres.}}} Colección.sort (PersonList, New PersonComparator ()) Se puede ordenar4: Resumen
Ambos métodos tienen sus propias ventajas y desventajas. Es simple de usar comparable. Mientras el objeto que implementa la interfaz comparable se convierte en un objeto comparable,
Sin embargo, el código fuente debe modificarse. La ventaja de usar el comparador es que no necesita modificar el código fuente, pero también implementa un comparador. Cuando se necesita comparar un objeto personalizado, el comparador y el objeto pueden transmitirse para comparar el tamaño. 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.