Cet article décrit deux méthodes d'implémentation pour le tri personnalisé Java pour ArrayList. Partagez-le pour votre référence, comme suit:
La mise en œuvre du tri personnalisé des listes en Java utilise principalement deux façons
1) Laissez la classe de l'objet qui doit être trié implémenter l'interface comparable, remplacer la méthode compareto (vers) et définir les règles de tri. Ensuite, vous pouvez appeler directement Collection.Sort () pour trier le tableau d'objets
classe publique étudiant implémente comparable {private int id; Âge privé; Hauteur d'int privé; nom de chaîne privé; Étudiant public (int id, nom de chaîne, int, int height) {this.id = id; this.name = name; this.age = âge; this.height = hauteur; } public int getID () {return id; } public int getage () {return âge; } public int getheight () {return height; } public String getName () {Nom de retour; } public void setid (int id) {this.id = id; } public void Setage (int Age) {this.age = age; } public void setName (string name) {this.name = name; } public void Setheight (int height) {this.height = height; } @Override public int compareto (objet o) {étudiant s = (étudiant) 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 test:
Importer java.util. *; Test de classe publique {public static void printdata (list <Student> list) {for (étudiant étudiant: list) {System.out.println ("numéro d'étudiant:" + student.getid () + "name:" + student.getName () + "Age" + "tage () + "High:" + Student.GetHeight ()); }} public static void main (String [] args) {list <Student> list = new ArrayList <> (); list.add (nouveau étudiant (1, "a", 20, 180)); list.add (nouveau étudiant (2, "B", 21, 175)); list.add (New Student (3, "C", 22, 190)); list.add (nouveau étudiant (4, "D", 21, 170)); list.add (New Student (5, "E", 20, 185)); System.out.println ("avant le tri"); printdata (liste); Collection.Sort (liste); System.out.println ("après l'âge et la taille triés"); printdata (liste); }}résultat:
Avant le numéro d'étudiant trié: 1 Nom: A Âge 20 Hauteur: 180 Numéro d'étudiant: 2 Nom: B Âge 21e hauteur: 175 Numéro d'étudiant: 3 Nom: C Âge 22 Taille: 190 Numéro d'étudiant: 4 Nom: D Âge de 21 ans: 170 Numéro d'étudiant: 5 Nom: E Âge 20 Hauteur: 185 After Age et Height Trimed Numéro d'étudiant: 1 Nom: A Âge 20 Hauteur: 180 Nombre d'étudiant: 5 Nom: E Âge 20 Hauteur: 185 Nom: B Âge 21 Hauteur: 175 Étudiant Numéro: 3 Nom: C Age 22 Hauteur: 190
2) Implémentez le comparateur de l'interface du comparateur, réécrivez la méthode de comparaison et transmettez-la en tri comme paramètre
Étudiant de classe publique {private int id; Âge privé; Hauteur d'int privé; nom de chaîne privé; Étudiant public (int id, nom de chaîne, int, int height) {this.id = id; this.name = name; this.age = âge; this.height = hauteur; } public int getID () {return id; } public int getage () {return âge; } public int getheight () {return height; } public String getName () {Nom de retour; } public void setid (int id) {this.id = id; } public void Setage (int Age) {this.age = age; } public void setName (string name) {this.name = name; } public void Setheight (int height) {this.height = height; }}Classe de test:
Importer java.util. *; Test de classe publique {public static void printdata (list <Student> list) {for (étudiant étudiant: list) {System.out.println ("numéro d'étudiant:" + student.getid () + "name:" + student.getName () + "Age" + "tage () + "High:" + Student.GetHeight ()); }} public static void main (String [] args) {list <Student> list = new ArrayList <> (); list.add (nouveau étudiant (1, "a", 20, 180)); list.add (nouveau étudiant (2, "B", 21, 175)); list.add (New Student (3, "C", 22, 190)); list.add (nouveau étudiant (4, "D", 21, 170)); list.add (New Student (5, "E", 20, 185)); System.out.println ("avant le tri"); printdata (liste); CollectionS.Sort (List, nouveau comparateur <Student> () {@Override public int compare (Student o1, étudiant o2) {if (o1.getage ()> = o2.getage ()) {return 1;} else {return -1;}}}); System.out.println ("après l'âge trié"); printdata (liste); Collection.Sort (List, nouveau comparateur <Student> () {@Override public int compare (étudiant o1, étudiant o2) {if (o1.getage ()> o2.getage ()) {return 1;} else if (o1.getage () <o2.getage ()) {return -1;} else {if (o1.getheight ()> = o2.gethEight () {if (o1.getheight ()> = o2.gethEight () {if (o1.getheight ()> = o2.gethEight ()) else {return -1;}}}}}); System.out.println ("après l'âge et la taille triés"); printdata (liste); }}Résultat de sortie:
Avant le numéro d'étudiant trié: 1 Nom: A Âge 20 Hauteur: 180 Étudiant Numéro d'étudiant: 2 Nom: B Âge 21e hauteur: 175 Numéro d'étudiant: 3 Nom: C Âge 22 Hauteur: 190 Numéro d'étudiant: 4 Nom: D Âge de 21e 21 ans Hauteur: 170 Étudiant Numéro d'élève: 3 Nom: C Âge 22 Hauteur: 190 après l'âge et la taille triée Étudiant Numéro d'élève: 1 Nom: A Âge 20 Hauteur: 180 Étudiant Numéro d'élève: 5 Nom: E Âge 20 Hauteur: 185 Étudiant Numéro d'élève: 4 Nom: D Age 21
D'après les exemples ci-dessus, nous pouvons voir que le tri est stable. J'ai regardé le code source des Collections.sort Java.Sort. Il est en effet implémenté en fonction du tri et du tri de fusion stables. Il a également été optimisé en interne, appelé Timsort. (Pour Timsort, veuillez vous référer à https://baike.baidu.com/item/timsort?fr=aladdin)
PS: Voici un outil de démonstration pour votre référence:
Animation en ligne INSERT INSERT / SELECT / Bubble / Merge / Hill / Quick Tri Algorithme Process Toolet:
http://tools.vevb.com/aideddesign/paixu_ys
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et tutoriel d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.