Arrays.sort (t [], comparador <? Super t> c) El método se utiliza para clasificar las matrices de objetos mediante reglas definidas por el usuario.
La documentación oficial de Java solo describe brevemente el papel de este método y no lo presenta en detalle. Este artículo analizará este método en profundidad.
1. Ejemplo simple
El método de uso de clasificación es muy simple y claro. En el siguiente ejemplo, primero defina un comparador que compara el tamaño del perro y luego pase su objeto de instancia como parámetro al método de clasificación. A través de este ejemplo, debería poder dominar rápidamente el uso de matrices.sort ().
import java.util.Arrays; import java.util.comparator; class dog {int size; public dog (int s) {size = s;}} class dogsizeComparator implementa comparador <d dog> {@anveride public int Compare (perro O1, perro O2) {return o1.size - o2.size;}} Public Class Arraysort {Public static void Main (STRING) d1 = nuevo perro (2); perro d2 = nuevo perro (1); perro d3 = nuevo perro (3); perro [] dogArray = {d1, d2, d3}; printdogs (dogArray); arrays.sort (dogArray, dog de dog de dogpomator ()); dog dogs (dogArray);} Public stattdogs (dog [] dogParparator (dog dogs): dog dogs) {dogs) System.out.print (d.size + ""); system.out.println ();}}La salida es:
2 1 3 1 2 3
2. Use el modo de política
Este es un ejemplo perfecto y conciso del patrón de estrategia. Vale la pena mencionar por qué el modelo de estrategia es adecuado para su uso en este escenario.
En términos generales, el patrón de política permite seleccionar diferentes algoritmos cuando se ejecuta el programa. Por ejemplo, cuando se clasifican, se pasan diferentes comparadores y se utilizan diferentes algoritmos.
Según el ejemplo anterior, suponga que desea ordenar por el peso del perro, puede crear un nuevo comparador para clasificar a continuación:
class dog {int size; int weight; public dog (int s, int w) {size = s; weight = w;}} class dogsizeComparator implementa comparador <d dog> {@anulación public int Compare (dog o1, dog o2) {return o1.size - o2.size;}} class dogcomparator implementa comparador <d dog> {@@@ortide público O1.Weight - O2.Weight;}} Public Class Arraysort {public static void main (string [] args) {dog d1 = new dog (2, 50); perro d2 = nuevo perro (1, 30); perro d3 = nuevo perro (3, 40); perro [] dogArray = {d1, d2, d3}; printdogs (dogArray); shels.sort (sort (sort (sort (dogArray,, dogArray, DogsizeComparator ()); printdogs (dogArray); arrays.sort (dogArray, new dogwewightcomParator ()); printdogs (dogArray);} public static void printdogs (dog [] perros) {para (perrito d: perros) system.print ("size =" + d. d. " +" + d.weight + " +" "); System.out.println ();}}Resultados de la ejecución:
tamaño = 2 peso = 50 tamaño = 1 peso = 30 tamaño = 3 peso = 40 tamaño = 1 peso = 30 tamaño = 2 peso = 50 tamaño = 3 peso = 40 tamaño = 1 peso = 30 tamaño = 3 peso = 40 tamaño = 2 peso = 50
El comparador es una interfaz, por lo que el método de clasificación puede pasar en cualquier clase que implementa esta interfaz, que es la idea principal del patrón de política.
3. ¿Por qué usar "super"
Es fácil de entender si usa "Comparador <T> C", pero el <? Supert> en el segundo parámetro de clasificación significa que el tipo aceptado por el comparador puede ser t o su superclase. ¿Por qué es una superclase? La respuesta es: esto permite la comparación de diferentes objetos de subclase utilizando el mismo comparador. Esto se demuestra claramente en el siguiente ejemplo:
import java.util.Arrays; import java.util.comparator; class animal {int size;} class dog extiende animal {public dog (int s) {size = s;}} class Cat extiende animal {public Cat (int s) {size = s;}} classizizizizizingomparator implementa comparador <imon> {@overide public int Comare (animal o1, animal o2) O2.Size;} // De esta manera, todas las subcases de animales pueden usar este comparador.} Public Class Arrasort {public static void main (string [] args) {perro d1 = nuevo perro (2); perro d2 = nuevo perro (1); perro d3 = nuevo perro (3); perro [] dogarray = {d1, d2, d3}; printdogs (dogArray); arrays.sort (dogArray, new AnimalSizeComParator ()); printdogs (dogArray); system.out.println (); // Cuando tiene una matriz de gato, se puede usar el mismo comparador. Cat C1 = New Cat (2); Cat C2 = New Cat (1); Cat C3 = New Cat (3); Cat [] CatArray = {C1, C2, C3}; PrintDogs (CatArray); Arrays.sort (CatArray, New AnimalizeComParator ()); PrintDogs (Catarray);} System.out.print ("size =" + a.size + ""); system.out.println ();}}Resultado de salida:
tamaño = 2 tamaño = 1 tamaño = 3 tamaño = 1 tamaño = 2 tamaño = 3 tamaño = 3 tamaño = 2 tamaño = 1 tamaño = 3 tamaño = 1 tamaño = 2 tamaño = 3
4. Resumen
La información relacionada con Arrays.sort () se resume de la siguiente manera:
General: Patrón de diseño de estrategia de súper clase;
Sorteo de fusión: complejidad de tiempo n*log (n);
Java.util.collections#sort (List <T> List, Comparator <? Super t> c) utiliza una idea similar a Arrays.sort.
Resumir
Lo anterior es toda la explicación detallada del código Arrays.sort () en Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados con Java en este sitio web. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!