Quando a coleção ou matriz que precisa ser classificada não é um tipo numérico simples, geralmente você pode usar o comparador ou comparável para implementar a classificação de objetos ou a classificação personalizada de uma maneira simples.
Uma função de comparação, que impõe uma ordem total em alguma coleção de objetos. Os comparadores podem ser passados para um método de classificação (como coleções.Sort ou Arrays.Sort) para permitir controle preciso sobre a ordem de classificação. Os comparadores também podem ser usados para controlar a ordem de determinadas estruturas de dados (como conjuntos classificados ou mapas classificados) ou para fornecer uma ordem para coleções de objetos que não têm uma ordem natural. ------ API
Você pode classificar a lista de string diretamente porque o objeto String nos ajudou a implementar a interface comparável; portanto, se nossa pessoa quiser classificar, também precisamos implementar um comparador.
1. Comparador
Classificar objetos armazenados no LinkedList
importar java.util.comparator; importar java.util.LinkedList; Classe Pessoa {Private Float Height; nome de string privado; Pessoa (altura da flutuação) {this.Height = altura; } public float getheight () {return altura; } public void sethight (altura do float) {this.Height = altura; } public string getName () {return name; } public void setName (nome da string) {this.name = name; }} classe PersonHeight implementa o comparador <Sesso> {@Override // reescreva o método de comparação, retornar <0 permanece inalterado, retornar> 0 é trocado em sequência (mantenha a ordem ascendente) public int (pessoa e1, pessoa e2) {if (e1.gethEight () <e2.gethight ()) {Return 1; } else {return -1; }}} public class Question3 {public static void main (string [] args) {pessoa p1 = nova pessoa (23.4f); p1.setName ("Stud1"); Pessoa p2 = nova pessoa (2.34F); p2.setName ("Stud2"); Pessoa p3 = nova pessoa (34.32f); p3.setName ("Stud3"); Pessoa P4 = nova pessoa (56,45F); p4.setName ("Stud4"); Pessoa p5 = nova pessoa (21.4f); p5.setName ("Stud5"); LinkedList <Pesso> al = new LinkedList <Pesso> (); al.add (p1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); // Ligue para o método de classificação para implementar coleções de classificação. // PRATA a saída para (Pessoa P: Al) System.out.println (p.getName ()); }}
Apegado:
// Classifique a data/*** Se O1 for menor que O2, retorne um número negativo; Se O1 for maior que O2, retorne um número positivo; Se forem iguais, retorne 0; */@SubstridePublic Int Compare (Etapa O1, Etapa O2) {DATE AceptTime1 = UtILTOOL.STRTODATE (O1.getAcceptTime (), NULL); Data aceittime2 = utiltool.strtodate (o2.getAcceptTime (), null); // Ascendendo no campo Data, se você quiser descer, poderá usar o método antes se (aceittTime1.after (aceittTime2)) retornar 1; retornar -1;}2. Comparável
importar java.util.Collections; importar java.util.comparator; importar java.util.LinkedList; classe de classe implementa comparável {altura de flutuação privada; nome de string privado; Pessoa (altura da flutuação) {this.Height = altura; } public float getheight () {return altura; } public void sethight (altura do float) {this.Height = altura; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } @Override public int Compareto (objeto o) {// ToDO Method Method Stub if (this.Height> ((Person) o) .Height) {return 1; } mais retornar -1; }} public class Question3 {public static void main (string [] args) {pessoa p1 = nova pessoa (23.4f); p1.setName ("Stud1"); Pessoa p2 = nova pessoa (2.34F); p2.setName ("Stud2"); Pessoa p3 = nova pessoa (34.32f); p3.setName ("Stud3"); Pessoa P4 = nova pessoa (56,45F); p4.setName ("Stud4"); Pessoa p5 = nova pessoa (21.4f); p5.setName ("Stud5"); LinkedList <Pesso> al = new LinkedList <Pesso> (); al.add (p1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); Coleções.sort (AL); para (Pessoa P: Al) System.out.println (P.GetName ()); }}Três. Comparação
Comparável é definido dentro da classe de pessoa .
O comparador é definido fora da pessoa. Neste momento, a estrutura da nossa classe de pessoa não precisa mudar.
Os dois métodos têm suas próprias vantagens e desvantagens. É simples usar comparável. Enquanto o objeto que implementa a interface comparável se tornar um objeto comparável, ele requer modificar o código -fonte. A vantagem de usar o comparador é que ele não requer modificar o código -fonte, mas implementar um comparador. Quando um objeto personalizado precisa ser comparado, você pode comparar o tamanho passando o comparador e o objeto juntos. No comparador, os usuários podem implementar a lógica complexa e geral por si só, para que possam corresponder a alguns objetos relativamente simples, o que pode economizar muito trabalho repetitivo.