A menudo es necesario clasificar las listas, desde la lista <String> para clasificar las clases personalizadas. No hay necesidad de fusionar o montar por su cuenta. Simplemente implementa una interfaz.
Este artículo primero presentará el uso de colecciones para clasificar la lista <string> , y luego hablará sobre el principio de colección.sort.
Hablemos de cómo clasificar las clases personalizadas.
Finalmente , se introducirá otro método de clasificación de objetos personalizados utilizando colecciones de colecciones, y los dos tipos son una simple comparación de rendimiento.
1. El principio de clasificar la lista <string> y colección.sort
El código es el siguiente
List <String> StringList = new ArrayList <String> (); StringList.Add ("agradable"); StringList.Add ("delicioso"); StringList.Add ("capaz"); stringList.add ("luna"); StringList.Add ("Prueba"); stringList.add ("amigo"); Colección.sort (StringList); for (string str: stringList) {System.out.println (str); }Donde las colecciones son java.util.collections.
Consulte la implementación de clasificación en colecciones
@SupessWarnings ("sin control") Pública estática <t se extiende comparable <? Super t >> void sort (list <t> list) {object [] array = list.toarray (); Arrays.sort (matriz); int i = 0; ListIterator <T> it = list.ListIterator (); while (it.hasnext ()) {it.next (); it.set ((t) matriz [i ++]); }}A partir de esto podemos ver que el cuerpo de clasificación es una matriz.sort (matriz); La implementación de clasificación de matrices es
public static void sort (object [] array) {// comienza comparabletImSort.sort (matriz); // finalizar con el cambio de android}Continuar rastreando, la implementación de clasificación de ComparableTimSort comparableTimSort.sort
static void sort (objeto [] a) a static void sort (objeto [] a, int lo, int hi) a binarysort void static privado (objeto [] a, int lo, int hi, int inicio). En BinarySort, la parte utilizada para la comparación de tamaño es
Comparable <ject> pivot = (comparable) a [inicio]; int int right = start; afirmar a la izquierda <= a la derecha; while (izquierda <derecha) {int mid = (izquierda + derecha) >>> 1; if (pivot.compareto (a [medio]) <0) right = mid; de lo contrario a la izquierda = Mid + 1; }La comparación del objeto se solicitará para la comparación. Por defecto, los tipos de String y Integer han sido anulados por el método Compareto. Para que puedas compararlo tú mismo
2. Comparación de clases personalizadas
A través de la introducción anterior, entendemos el principio de la clasificación de colecciones. Lo siguiente es introducir la clasificación de objetos personalizados. Primero, verifique el principio de comparación de entero y cadena, y luego presente cómo comparar las clases personalizadas.
2.1 Verificamos la implementación de Object y descubrimos que no hay un método Compareto.
Mira la definición de enteros
El número entero de clase final pública extiende el número de implementos comparables <integer>
Veamos la definición de cadena
La cadena de clase pública final implementa java.io.serializable, comparable <string>, CharSequence
Podemos encontrar que todos heredan de comparable
2.2 Ver interfaz comparable
Puede encontrar que solo hay un método en comparable
Código Java
Public int Compareto (T o);
En otras palabras, el método binarySort en realidad llama al método comparable comparable, para saber que siempre que se herede de comparable,
E implementar comparación para llamar colección.sort para clasificar objetos personalizados
2.3 Comparación de clases personalizadas
El siguiente código es ordenar al usuario. Primero, ordene por nombre uno por uno. Si los nombres son los mismos, clasifique de pequeño a grande por edad.
Código Java
Public Class Mantest {public static void main (string [] args) {list <serem> userList = new ArrayList <Serer> (); UserList.Add (nuevo usuario ("Lucy", 19)); UserList.Add (nuevo usuario ("Jack", 19)); UserList.Add (nuevo usuario ("Jim", 19)); UserList.Add (nuevo usuario ("James", 19)); UserList.Add (nuevo usuario ("Herry", 19)); UserList.Add (nuevo usuario ("Luccy", 19)); UserList.Add (nuevo usuario ("James", 18)); UserList.Add (nuevo usuario ("Herry", 20)); Colección.sort (UserList); for (usuario de usuario: userList) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} El usuario de la clase estática privada implementa comparable <serve> {Nombre de cadena privada; edad privada int; Usuario público (nombre de cadena, int Age) {this.name = name; this.age = edad; } @Override public int Compareto (usuario otro) {int compareName = this.name.compareto (otro.getName ()); if (comparación == 0) {return (this.age == OTRO.GETAGE ()? 0: (this.age> otro.getage ()? 1: -1)); } Comparación de retorno; } public String getName () {nombre de retorno; } public int getAge () {return Age; }}}Después de la ejecución, la salida es:
Código XML:
HERRY 19 HERRY 20 Jack 19 James 18 James 19 Jim 19 Luccy 19 Lucy 19
Se puede ver que solo se necesitan dos puntos
a. Heredado de comparable
Código Java
El usuario de la clase estática privada implementa comparable <serve>
b. Implementar el método Compareto
La comparación pública de Public int anterior (usuario otro) es el tema de la comparación
Puede ver que int compare = this.name.compareto (otro.getName ()); significa el nombre de comparación
Si es mayor o devuelto 1, es igual para devolver 0, y si es menor que, devolverá -1 .
Si es igual, compare de acuerdo con el tamaño de la edad int.
Lo anterior es mayor o igual al retorno 1, y lo anterior es menor que las devoluciones -1, que también es la base para la comparación de binarios.
3. Use la función sobrecargada de las colecciones ordenar objetos personalizados
El código es el siguiente, y los nombres aún se comparan primero, si son iguales, entonces la producción de edad se compara
Código Java
Public Class Mantest {public static void main (string [] args) {list <serem> userList = new ArrayList <Serer> (); UserList.Add (nuevo usuario ("Lucy", 19)); UserList.Add (nuevo usuario ("Jack", 19)); UserList.Add (nuevo usuario ("Jim", 19)); UserList.Add (nuevo usuario ("James", 19)); UserList.Add (nuevo usuario ("Herry", 19)); UserList.Add (nuevo usuario ("Luccy", 19)); UserList.Add (nuevo usuario ("James", 18)); UserList.Add (nuevo usuario ("Herry", 20)); Collections.sort (UserList, New Comparator <Serem> () {public int Compare (User User1, User User2) {int compareName = user1.getName (). CompareTo (user2.getName ()); if (compareNeMe == 0) {return (user1.getgege () == user2.getage ()? 0: (user1.getage ()> comparación; for (usuario de usuario: userList) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} Usuario de clase estática privada {nombre de cadena privada; edad privada int; Usuario público (nombre de cadena, int Age) {this.name = name; this.age = edad; } public String getName () {nombre de retorno; } public int getAge () {return Age; }}}Puedes ver eso
Código Java
Colección.sort (UserList, nuevo comparador <serem> ())
Es el tema de la comparación e implementa el método de comparación del comparador. El siguiente es el principio de este método
Colecciones de seguimiento
Código Java
Public static <t> void sort (List <T> List, Comparator <? Super t> c)
llegar
Código Java
Pública static <t> void sort (t [] a, comparador <? Super t> c)
llegar
Código Java
MergeSort vacío estático privado (Object [] Src, Object [] Dest, Int Low, int High, Int Off, Comparador C)
Puede encontrar el código de la siguiente manera:
Código Java
if (longitud <insisttionsort_threshold) {for (int i = low; i <high; i ++) para (int j = i; j> low && c.compare (dest [j-1], dest [j])> 0; j-) swap (dest, j, j-1); devolver; }Método de comparación del comparador de llamadas
4. Comparación de las dos actuaciones de clasificación anteriores
BinarySort necesita realizar comparaciones NLG (N) , y en el peor de los casos, n^2 movimientos
Mergesort realiza constantemente divisiones binarias, y después de que las divisiones binarias se dividen en partes pequeñas, se inserta y se clasifica. Entonces, se compararán los tiempos de NLG (N) y se moverán los tiempos de NLG (N) . Pero debe copiar primero una copia de los datos de origen, por lo que ocupará el doble de espacio
Para que pueda elegir de acuerdo con sus necesidades
El artículo anterior discute brevemente el orden de las matrices o listas de objetos y los principios de clasificación de las colecciones son todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.