Dieser Artikel beschreibt zwei Implementierungsmethoden für Java Custom Sorting für ArrayList. Teilen Sie es für Ihre Referenz wie folgt weiter:
Das Implementieren der benutzerdefinierten Sortierung von Listen in Java verwendet hauptsächlich zwei Wege
1) Lassen Sie die Klasse des Objekts, das sortiert werden muss, die vergleichbare Schnittstelle implementieren, die Vergleichsmethode (an) überschreiben und die darin enthaltenen Sortierregeln definieren. Anschließend können Sie die Sammlungen.Sort () direkt anrufen, um das Objektarray zu sortieren
Schüler der öffentlichen Klasse implementiert vergleichbar {private int id; privates int Alter; private int Höhe; privater Zeichenfolge Name; public student (int id, string name, int alter, int height) {this.id = id; this.name = name; this.age = Alter; this.height = Höhe; } public int getid () {return id; } public int getage () {return ay; } public int getheight () {return Height; } public String getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int age) {this.age = älter; } public void setName (String -Name) {this.name = name; } public void setheight (int Höhe) {this.height = Höhe; } @Override public int vergleicheto (Objekt o) {Student S = (Student) o; if (this.age> S.age) {return 1; } else if (this.age <s.age) {return -1; } else {if (this.height> = sheight) {return 1; } else {return -1; }}}}Testklasse:
Importieren Sie Java.util.*; public class test {public static void printData (Liste <Student> Liste) {für (Schülerstudent: Liste) {System.out.println ("Studentnummer:" + student.getId () + "Name" + Student.getName () + "Age" + Student.getage () + "Höhe:" + Student: " + Schüler. }} public static void main (String [] args) {list <Studenten> list = new ArrayList <> (); list.add (neuer Schüler (1, "a", 20, 180)); list.add (neuer Schüler (2, "B", 21, 175)); list.add (neuer Schüler (3, "C", 22, 190)); list.add (neuer Schüler (4, "D", 21, 170)); list.add (neuer Schüler (5, "E", 20, 185)); System.out.println ("bevor sortiert"); printData (Liste); Sammelns.sort (Liste); System.out.println ("After Age and Height sortiert"); printData (Liste); }}Ergebnis:
Vor der sortierten Schülernummer: 1 Name: A -Alter 20 Höhe: 180 Schülernummer: 2 Name: B Alter 21 Höhe: 175 Schülernummer: 3 Name: C Alter 22 Höhe: 190 Schülernummer: 4 Name: D Alter 21 Höhe: 170 Schülernummer: 5 Name name: E -Alter 20 Höhe: 185 nach Alter und Höhe Sortiernummer: 185 Studiennummer: 5 -Name: 5 -Name: 5 -Name: 5 -Name: 5 -Name -Nenner: Name: B Alter 21 Höhe: 175 Schülernummer: 3 Name: C Alter 22 Höhe: 190
2) Implementieren Sie den Komparator -Schnittstellenvergleich, schreiben Sie die Vergleichsmethode neu und geben Sie sie als Parameter in Sortier
Student der öffentlichen Klasse {private int id; privates int Alter; private int Höhe; privater Zeichenfolge Name; public student (int id, string name, int alter, int height) {this.id = id; this.name = name; this.age = Alter; this.height = Höhe; } public int getid () {return id; } public int getage () {return ay; } public int getheight () {return Height; } public String getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int age) {this.age = älter; } public void setName (String -Name) {this.name = name; } public void setheight (int Höhe) {this.height = Höhe; }}Testklasse:
Importieren Sie Java.util.*; public class test {public static void printData (Liste <Student> Liste) {für (Schülerstudent: Liste) {System.out.println ("Studentnummer:" + student.getId () + "Name" + Student.getName () + "Age" + Student.getage () + "Höhe:" + Student: " + Schüler. }} public static void main (String [] args) {list <Studenten> list = new ArrayList <> (); list.add (neuer Schüler (1, "a", 20, 180)); list.add (neuer Schüler (2, "B", 21, 175)); list.add (neuer Schüler (3, "C", 22, 190)); list.add (neuer Schüler (4, "D", 21, 170)); list.add (neuer Schüler (5, "E", 20, 185)); System.out.println ("bevor sortiert"); printData (Liste); Collectionss.Sort (Liste, neuer Komparator <Studenten> () {@Override public int compare (Student O1, Student O2) {if (o1.getage ()> = o2.getage ()) {return 1;} else {return -1;}}}); System.out.println ("After Age sortiert"); printData (Liste); Collectionss.Sort (Liste, neuer Vergleicher <Studenten> () {@Override public int Compare (Student O1, Student O2) {if (o1.getage ()> o2.getage ()) {return 1;} else if (o1.getage () <O2.Getage ()) {return -1;} sonst {if (o1.getht) {if (o1.geth) {if (o1.gethty) {if (o1.geth) {if (o1.geth) {if (o1.geth) {if (o1.geth () {{if (o1.geth () {{if (o1.geth () = o2.) {return -1;}}}}}); System.out.println ("After Age and Height sortiert"); printData (Liste); }}Ausgangsergebnis:
Vor der sortierten Schülernummer: 1 Name: A -Alter 20 Höhe: 180 Schülernummer: 2 Name: B Alter 21 Höhe: 175 Schülernummer: 3 Name: C Alter 22 Höhe: 190 Schülernummer: 4 Name: d Alter 21 Höhe: 170 Schülernummer: 5 NAME: E Alter 20 Höhe: 185 After Alter Sortierte Schüler Nummer: 1 Name: 180 Schüler Nummer: 5 Name 4 Name: 5 NAME: Alter 21 Höhe: 170 Schülernummer: 3 Name: C Alter 22 Höhe: 190 Nach Alter und Höhe sortierte Schüler Nummer: 1 Name: A -Alter 20 Höhe: 180 Schülernummer: 5 Name: E Alter 20 Höhe: 185 Schüler Nummer: 4 Name: d Alter 21 Höhe: 170 Schüler Nummer: 2 Name: B Alter 21 Höhe: 175 Schüler Nummer: 3 Name C.
Aus den obigen Beispielen können wir erkennen, dass die Sortierung stabil ist. Ich habe mir den Quellcode der Java Collections.sort angesehen. SORT. Es wird in der Tat auf der Grundlage einer stabilen Zusammenführung und Sortierung implementiert. Es wurde auch intern optimiert, genannt Timsort. (Für Timsort finden Sie bitte https://baike.baidu.com/item/timsort?fr=aladdin)
PS: Hier ist ein Demonstrationstool für Ihre Referenz:
Online -Animation Demonstration einfügen/auswählen/bubble/merge/hill/Schnellsortieralgorithmus Tool:
http://tools.vevb.com/aideddesign/paixu_ys
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.