Este artigo descreve dois métodos de implementação para a classificação personalizada Java para a ArrayList. Compartilhe -o para sua referência, como segue:
Implementando a classificação personalizada de listas em Java usa principalmente duas maneiras
1) Deixe a classe do objeto que precisa ser classificada implementar a interface comparável, substituir o método compareto (para) e definir as regras de classificação nele. Então você pode chamar diretamente de coleções.sort () para classificar a matriz de objeto
A classe pública Student implementa comparável {private int id; private Int Age; altura privada int; nome de string privado; estudante público (int id, nome da string, idade int, int altura) {this.id = id; this.name = nome; this.age = idade; this.Height = altura; } public int getId () {return id; } public int getage () {Age de retorno; } public int getHeight () {return Hight; } public string getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int Age) {this.age = Age; } public void setName (nome da string) {this.name = name; } public void sethight (int alting) {this.Height = altura; } @Override public int compareto (objeto o) {Student s = (Student) o; if (this.age> s.age) {return 1; } else if (this.age <s.age) {return -1; } else {if (this.Height> = s.Height) {return 1; } else {return -1; }}}}Classe de teste:
Importar java.util.*; Teste de classe pública {public static void printData (List <very Student> list) {for (aluno: estudante: list) {System.out.println ("Número do aluno:" + student.get.getId () + "Nome:" Student.get.getname () + "idade" + student.getage () + "altura:" " }} public static void main (string [] args) {list <vertenty> list = new ArrayList <> (); list.add (novo aluno (1, "A", 20, 180)); list.add (novo aluno (2, "B", 21, 175)); list.add (novo aluno (3, "C", 22, 190)); list.add (novo aluno (4, "D", 21, 170)); list.add (novo aluno (5, "e", 20, 185)); System.out.println ("Antes de classificar"); printData (lista); Coleções.Sort (Lista); System.out.println ("Após a idade e a altura classificados"); printData (lista); }}resultado:
Antes de classificar o aluno Número: 1 Nome: A Idade 20 Altura: 180 Número do aluno: 2 Nome: B Idade 21 Altura: 175 Número do aluno: 3 Nome: C Idade 22 Altura: 190 Aluno Número: 4 Nome: D Idade 21 Altura: 170 Número do aluno: 5 Nome: E ALTURA 20 Altura: 185 Após a idade e Altura e Altura Número: 1 Nome: A INDE 20 Altura: E idade do aluno 20 5. Nome: B Idade 21 Altura: 175 Número do aluno: 3 Nome: C Idade 22 Altura: 190
2) Implemente o comparador da interface do comparador, reescreva o método de comparação e passe -o para classificar como um parâmetro
Public Class Student {private Int ID; private Int Age; altura privada int; nome de string privado; estudante público (int id, nome da string, idade int, int altura) {this.id = id; this.name = nome; this.age = idade; this.Height = altura; } public int getId () {return id; } public int getage () {Age de retorno; } public int getHeight () {return Hight; } public string getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int Age) {this.age = Age; } public void setName (nome da string) {this.name = name; } public void sethight (int alting) {this.Height = altura; }}Classe de teste:
Importar java.util.*; Teste de classe pública {public static void printData (List <very Student> list) {for (aluno: estudante: list) {System.out.println ("Número do aluno:" + student.get.getId () + "Nome:" Student.get.getname () + "idade" + student.getage () + "altura:" " }} public static void main (string [] args) {list <vertenty> list = new ArrayList <> (); list.add (novo aluno (1, "A", 20, 180)); list.add (novo aluno (2, "B", 21, 175)); list.add (novo aluno (3, "C", 22, 190)); list.add (novo aluno (4, "D", 21, 170)); list.add (novo aluno (5, "e", 20, 185)); System.out.println ("Antes de classificar"); printData (lista); Coleções.sort (List, novo comparador <vertudy> () {@Override public int Compare (Student O1, Student O2) {if (o1.getage ()> = o2.getage ()) {return 1;} else {return -1;}}}); System.out.println ("Após a idade classificada"); printData (lista); Coleções.sort (list, novo comparador <vertudy> () {@Override public int compare (Student O1, Student O2) {if (o1.getage ()> o2.getage ()) {return -1;} else (o1.getage () <o2.getage ()) {Return -1;} {se (o1.gethEav. {return -1; System.out.println ("Após a idade e a altura classificados"); printData (lista); }}Resultado da saída:
Antes de classificar o aluno Número: 1 Nome: A Idade 20 Altura: 180 Número do aluno: 2 Nome: B Idade 21: 175 Número do aluno: 3 Nome: C Idade 22 Altura: 190 Aluno Número: 4 Nome: D Idade 21 Altura: 170 ALUGO Número: 5 Nome e Idade 20 Altura 20 Altura e 185 Após a idade do aluno Número: 1 Nome: A Idade 20 Altura: 180 Estudante: 5 Altura 20 E. Idade 21 Altura: 170 Aluno Número: 3 Nome: C Idade 22 Altura: 190 Após a idade e a altura, classificada Número do aluno: 1 Nome: A Idade 20 Altura: 180 Número do aluno: 5 Nome: E Idade 20 Altura: 185 Número do aluno: 4 Nome: D Idade 21 Altura: 170 número
A partir dos exemplos acima, podemos ver que a classificação é estável. Eu olhei para o código -fonte de Collections.sort Java.Sort. É realmente implementado com base na classificação e classificação estável de mesclagem. Também foi otimizado internamente, chamado TimSort. (Para Timsort, consulte https://baike.baidu.com/item/timsort?fr=aladdin)
PS: Aqui está uma ferramenta de demonstração para sua referência:
Demonstração de animação on -line Inserir/selecionar/Bubble/Merge/Hill/Quick Strating Algorithm Process Fool:
http://tools.vevb.com/aideddesign/paixu_ys
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.