Lorsque la collection ou le tableau qui doit être trié n'est pas un type numérique simple, vous pouvez généralement utiliser le comparateur ou comparable à l'implémentation de tri d'objets ou de tri personnalisé de manière simple.
Une fonction de comparaison, qui impose une commande totale à une collection d'objets. Les comparateurs peuvent être transmis à une méthode de tri (tels que Collection.Sort ou Arrays.sort) pour permettre un contrôle précis sur l'ordre de tri. Les comparateurs peuvent également être utilisés pour contrôler l'ordre de certaines structures de données (telles que des ensembles triés ou des cartes triées), ou pour fournir une commande pour les collections d'objets qui n'ont pas de commande naturelle. ------ API
Vous pouvez trier la liste des chaînes directement parce que l'objet String nous a aidés à implémenter l'interface comparable, donc si notre personne veut trier, nous devons également implémenter un comparateur.
1. Comparateur
Trier les objets stockés dans LinkedList
Importer java.util.comparator; import java.util.linkedlist; classe de classe {hauteur de flotteur privé; nom de chaîne privé; Personne (hauteur float) {this.height = hauteur; } public float getheight () {return height; } public void Setheight (Float Height) {this.height = height; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; }} class Personheight implémente le comparateur <ponse> {@Override // Réécriture de la méthode de comparaison, return <0 reste inchangé, return> 0 est échangé en séquence (continuer à ascendier) public int compare (personne e1, personne e2) {if (e1.getheight () <e2.GetHeight ()) {return 1; } else {return -1; }}} classe publique Question3 {public static void main (String [] args) {personne p1 = new personne (23.4f); p1.setName ("Stud1"); Personne P2 = nouvelle personne (2,34f); P2.SetName ("Stud2"); Personne P3 = nouvelle personne (34,32f); P3.SetName ("Stud3"); Personne P4 = nouvelle personne (56,45f); P4.SetName ("Stud4"); Personne P5 = nouvelle personne (21,4f); P5.SetName ("Stud5"); LinkedList <Songe> al = new LinkedList <onon> (); al.add (P1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); // Appelez la méthode de tri pour implémenter des collections de tri.Sort (al, new Personheight ()); // Transip la sortie pour (Person P: Al) System.out.println (p.getName ()); }}
Ci-joint:
// trier la date / ** * Si O1 est inférieur à O2, renvoyez un nombre négatif; Si O1 est supérieur à O2, renvoyez un nombre positif; S'ils sont égaux, retournez 0; * / @ OverRidepublic int compare (étape o1, étape o2) {date accepteTime1 = ultiltool.strtodate (o1.getAcceptTime (), null); Date AcceptTime2 = ultiltool.strtodate (o2.GetAcceptTime (), null); // Ascendant le champ Date, si vous souhaitez descendre, vous pouvez utiliser la méthode avant (accepterTime1.after (accepterTime2)) Retour 1; retour -1;}2. Comparable
Importer java.util.collections; import java.util.comparator; import java.util.linkedList; la personne de classe implémente la hauteur de flottement comparable {privé; nom de chaîne privé; Personne (hauteur float) {this.height = hauteur; } public float getheight () {return height; } public void Setheight (Float Height) {this.height = height; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } @Override public int compareto (objet o) {// TODO Méthode générée automatiquement } else return -1; }} classe publique Question3 {public static void main (String [] args) {personne p1 = new personne (23.4f); p1.setName ("Stud1"); Personne P2 = nouvelle personne (2,34f); P2.SetName ("Stud2"); Personne P3 = nouvelle personne (34,32f); P3.SetName ("Stud3"); Personne P4 = nouvelle personne (56,45f); P4.SetName ("Stud4"); Personne P5 = nouvelle personne (21,4f); P5.SetName ("Stud5"); LinkedList <Songe> al = new LinkedList <onon> (); al.add (P1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); Collection.Sort (AL); pour (personne p: al) System.out.println (p.getName ()); }}Trois. Comparaison
Comparable est défini à l'intérieur de la classe de personne .
Le comparateur est défini en dehors de la personne. Pour le moment, la structure de notre classe de personne n'a pas besoin de changer.
Les deux méthodes ont leurs propres avantages et inconvénients. Il est simple d'utiliser comparable. Tant que l'objet qui implémente l'interface comparable devient un objet comparable, il nécessite de modifier le code source. L'avantage de l'utilisation du comparateur est qu'il ne nécessite pas de modification du code source, mais d'implémentation d'un comparateur. Lorsqu'un objet personnalisé doit être comparé, vous pouvez comparer la taille en passant le comparateur et l'objet ensemble. Dans le comparateur, les utilisateurs peuvent implémenter une logique complexe et générale par eux-mêmes, afin qu'ils puissent correspondre à certains objets relativement simples, ce qui peut économiser beaucoup de travail répétitif.