Muitas vezes, é necessário classificar listas, da lista <String> para classificar as classes personalizadas. Não há necessidade de mesclar ou riscar por conta própria. Basta implementar uma interface.
Este artigo introduzirá primeiro o uso de coleções para classificar a lista <String> e depois falará sobre o princípio da coleção.Sort.
Vamos falar sobre como classificar aulas personalizadas.
Finalmente , outro método de classificar objetos personalizados usando coleções será introduzido, e os dois tipos são simples comparação de desempenho.
1. O princípio da lista de classificação <string> e coleta.sort
O código é o seguinte
List <String> stringList = new ArrayList <String> (); stringList.add ("nice"); stringList.add ("delicioso"); stringList.add ("capaz"); stringList.add ("lua"); stringList.add ("tente"); stringList.add ("amigo"); Coleções.sort (StringList); para (String str: stringList) {System.out.println (str); }Onde as coleções são java.util.Collections.
Confira a implementação de classificação nas coleções
@Suppresswarnings ("desmarcado") public static <t estende comparável <?? super t >> void Sort (list <T> list) {object [] Array = list.toarray (); Arrays.sort (Array); int i = 0; ListIterator <T> it = list.ListIterator (); while (it.hasnext ()) {it.next (); it.set ((t) matriz [i ++]); }}A partir disso, podemos ver que o corpo de classificação é matriz.Sort (Array); A implementação de classificação das matrizes é
public static void Sort (Object [] Array) {// Comece o Android mudado ComparableTimsort.sort (Array); // End Android-Kanged}Continue rastreando, a implementação de classificação ComparableTimsort ComparableTimsort.sort
Classificação do vazio estático (objeto [] a) para o tipo de vazio estático (objeto [] a, int lo, int hi) para binário estático privado binárioSort (objeto [] a, int lo, int hi, int start). No bináriosort, a parte usada para comparação de tamanho é
Comparável <ject> pivot = (comparável) a [start]; int esquerd = lo; int certo = start; afirmar esquerda <= direita; while (esquerda <direita) {int mid = (esquerda + direita) >>> 1; if (pivot.compareto (a [mid]) <0) direita = mid; outra esquerda = MID + 1; }O compareto do objeto será chamado para comparação. Por padrão, os tipos de string e número inteiro foram substituídos pelo método compareto. Então você pode comparar você mesmo
2. Comparação de classes personalizadas
Através da introdução acima, entendemos o princípio da classificação de coleções. O seguinte é para introduzir a classificação de objetos personalizados. Primeiro, verifique o princípio de comparação de inteiro e string e, em seguida, apresente como comparar classes personalizadas.
2.1 Verificamos a implementação do objeto e descobrimos que não há método compareto.
Veja a definição inteira
A classe final pública inteira estende o número implementa comparável <inteiro>
Vejamos a definição de string
a classe final pública Final String implementa Java.io.Serializable, comparável <string>, Charsequence
Podemos descobrir que todos eles herdam de comparável
2.2 Ver interface comparável
Você pode descobrir que existe apenas um método em comparável
Código Java
public int compareto (T O);
Em outras palavras, o método bináriosort realmente chama o método comparável comparado, de modo a saber que, desde que seja herdado de comparável,
E implemente compareto para call collects.sort para classificar objetos personalizados
2.3 Comparação de classes personalizadas
O código a seguir é classificar o usuário. Primeiro, classifique pelo nome um por um. Se os nomes forem iguais, classifique de pequeno a grande por idade.
Código Java
public class Mantest {public static void main (string [] args) {list <suser> userList = new ArrayList <suser> (); userlist.add (novo usuário ("Lucy", 19)); userlist.add (novo usuário ("Jack", 19)); userlist.add (novo usuário ("jim", 19)); userlist.add (novo usuário ("James", 19)); userlist.add (novo usuário ("Herry", 19)); userlist.add (novo usuário ("Luccy", 19)); userlist.add (novo usuário ("James", 18)); userlist.add (novo usuário ("Herry", 20)); Coleções.sort (UserList); para (usuário do usuário: userList) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} classe estática privada implementa o Usuário comparável <suser> {nome da string privada; private Int Age; Usuário público (nome da string, Int Age) {this.name = name; this.age = idade; } @Override public int compareto (user outro) {int compareName = this.name.compareto (outro.getName ()); if (compareName == 0) {return (this.age == outro.getage ()? 0: (this.age> outro.getage ()? 1: -1)); } retornar o nome da comparação; } public string getName () {return name; } public int getage () {Age de retorno; }}}Após a execução, a saída é:
Código XML:
Herry 19 Herry 20 Jack 19 James 18 James 19 Jim 19 Luccy 19 Lucy 19
Pode -se ver que apenas dois pontos são necessários
um. Herdado de comparável
Código Java
A classe estática privada implementa o usuário comparável <suário>
b. Implementar o método compareto
O Public Int CompareTo acima (User outro) é o assunto da comparação
Você pode ver que int compareName = this.name.compareto (outro.getName ()); significa o nome de comparação
Se for maior ou devolvido 1, será igual ao retorno 0 e, se for menor que, retornará -1 .
Se for igual, compare de acordo com o tamanho da idade int.
O acima é maior ou igual ao retorno 1, e o acima é menor que o retorno -1, que também é a base para a comparação do Binário.
3. Use a função sobrecarregada de coleções classificadas para classificar objetos personalizados
O código é o seguinte e os nomes ainda são comparados primeiro, se forem iguais, então a saída da idade é comparada
Código Java
public class Mantest {public static void main (string [] args) {list <suser> userList = new ArrayList <suser> (); userlist.add (novo usuário ("Lucy", 19)); userlist.add (novo usuário ("Jack", 19)); userlist.add (novo usuário ("jim", 19)); userlist.add (novo usuário ("James", 19)); userlist.add (novo usuário ("Herry", 19)); userlist.add (novo usuário ("Luccy", 19)); userlist.add (novo usuário ("James", 18)); userlist.add (novo usuário ("Herry", 20)); Coleções.sort (UserList, New Comparator <suser> () {public int compare (usuário do usuário1, usuário do usuário2) {int compareName = user1.getName (). CompareTo (user2.getName ()); se (comparaName == 0) {return1.getAge () ==getAgEage ()? 0: (0: 0); nome comparado; para (usuário do usuário: userList) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} classe estática privada Usuário {Nome da String Private; private Int Age; Usuário público (nome da string, Int Age) {this.name = name; this.age = idade; } public string getName () {return name; } public int getage () {Age de retorno; }}}Você pode ver isso
Código Java
Coleções.sort (UserList, novo comparador <suser> ())
É objeto de comparação e implementa o método de comparação do comparador. A seguir é o princípio deste método
Rastrear coleções
Código Java
Public Static <t> void Sort (lista <T> Lista, comparador <? Super T> C)
chegar
Código Java
public static <t> void Sort (t [] a, comparador <? super t> c)
chegar
Código Java
Mergesort de vazio estático privado (objeto [] src, objeto [] dest, int baixo, int alto, int desativado, comparador c)
Você pode encontrar o código da seguinte forma:
Código Java
if (length <inserttsort_threshold) {for (int i = low; i <alto; i ++) para (int j = i; j> low && c.compare (dest [j-1], dest [j])> 0; j--) swap (dest, j, j-1); retornar; }Método de comparação do comparador de chamadas
4. Comparação das duas performances de classificação acima
O bináriosort precisa executar comparações NLG (n) e, na pior das hipóteses
O Mergesort está realizando constantemente divisões binárias e, após as divisões binárias são divididas em pequenas partes, é inserida e classificada. Portanto, os tempos NLG (n) serão comparados e os tempos NLG (n) serão movidos . Mas ele precisa copiar uma cópia dos dados de origem primeiro, para que ocupe o dobro do espaço
Então você pode escolher de acordo com suas necessidades
O artigo acima discute brevemente a ordem de matrizes ou listas de objetos e os princípios de classificação das coleções são todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.