Es ist oft erforderlich, Listen zu sortieren, von List <string> zum Sortieren benutzerdefinierter Klassen. Sie müssen nicht selbst verschmelzen oder eine Häufigkeit sortieren. Implementieren Sie einfach eine Schnittstelle.
In diesem Artikel wird zunächst die Verwendung von Sammlungen zur Sortierung von Liste <string> vorgestellt und dann über das Prinzip der Sammlungen gesprochen. SORT.
Lassen Sie uns darüber sprechen, wie Sie benutzerdefinierte Klassen sortieren.
Schließlich wird eine weitere Methode zur Sortierung benutzerdefinierter Objekte mithilfe von Sammlungssortierungen eingeführt, und die beiden Arten sind einfacher Leistungsvergleich.
1. Das Prinzip der Sortierliste <string> und collections.sorts
Der Code ist wie folgt
List <String> StringList = New ArrayList <string> (); StringList.Add ("nette"); StringList.add ("lecker"); StringList.add ("fähig"); StringList.Add ("Mond"); StringList.add ("try"); StringList.add ("Freund"); Collectionss.sort (StringList); für (string str: stringList) {system.out.println (str); }Wo Sammlungen java.util.Collections sind.
Schauen Sie sich die Sortierimplementierung in Sammlungen an
@SuppressWarnings ("Unbeschwertet") öffentliche statische <t erweitert vergleichbar <? Super t >> void sort (list <t> list) {Object [] array = list.toArray (); Arrays.sort (Array); int i = 0; ListIterator <T> iT = list.listIterator (); while (it.hasnext ()) {it.Next (); it.set ((t) Array [i ++]); }}Daraus können wir sehen, dass der Sortierkörper Arrays.Sort (Array) ist; Die Sortierimplementierung von Arrays ist
public static void sort (Object [] Array) {// mit Android-veränderte Vergleiche-Vergleiche (Array) beginnen; // Ende von Android-Changed} beenden}Verfolgen
statische Hohlraumsortierung (Objekt [] a) zu statischer Hohlraumsortierung (Objekt [] a, int lo, int hi) zu privaten statischen Hohlraum -Binarysort (Objekt [] a, int lo, int hi, int start). In Binarysort ist der für den Größenvergleich verwendete Teil
Vergleichbar <elements> pivot = (vergleichbar) a [start]; int links = lo; int rechts = Start; links <= rechts behaupten; while (links <rechts) {int Mid = (links + rechts) >>> 1; if (pivot.comPareto (a [Mid]) <0) rechts = mid; sonst links = Mid + 1; }Der Vergleich des Objekts wird zum Vergleich aufgerufen. Standardmäßig wurden sowohl Zeichenfolge als auch ganzzahlige Typen von der Vergleichsmethode überschrieben. So können Sie es selbst vergleichen
2. Vergleich der benutzerdefinierten Klassen
Durch die obige Einführung verstehen wir das Prinzip der Sammlungssortierung. Das Folgende ist die Einführung der Sortierung von benutzerdefinierten Objekten. Überprüfen Sie zunächst das Vergleichsprinzip von Ganzzahl und String und stellen Sie dann vor, wie Sie benutzerdefinierte Klassen vergleichen.
2.1 Wir haben die Implementierung von Objekt überprüft und festgestellt, dass es keine Vergleichsmethode gibt.
Schauen Sie sich die Ganzzahldefinition an
Public Final Class Integer erweitert die Zahl implementiert vergleichbar <Integer>
Schauen wir uns die Definition der Zeichenfolge an
Public Final Class String implementiert java.io.serializable, vergleichbar <string>, charsequence
Wir können feststellen, dass sie alle von vergleichbar erben
2.2 Vergleichbare Schnittstelle anzeigen
Sie können feststellen, dass es in vergleichbarer Methode nur eine Methode gibt
Java -Code
public int vergleicheto (t o);
Mit anderen Worten, die Binarysort -Methode nennt tatsächlich die vergleichbare Vergleichsmethode, um zu wissen
Implementieren Sie Vergleiche, um Sammlungen zu rufen. SORT, um benutzerdefinierte Objekte zu sortieren
2.3 Vergleich der benutzerdefinierten Klassen
Der folgende Code besteht darin, den Benutzer zu sortieren. Erstens sortieren Sie nacheinander nach dem Namen. Wenn die Namen gleich sind, sortieren Sie nach Alter von klein nach groß.
Java -Code
public class pootest {public static void main (String [] args) {list <Unter> userList = new ArrayList <Beus> (); userList.add (neuer Benutzer ("Lucy", 19)); userList.add (neuer Benutzer ("Jack", 19)); userList.add (neuer Benutzer ("jim", 19)); userList.add (neuer Benutzer ("James", 19)); userList.add (neuer Benutzer ("herry", 19)); userList.add (neuer Benutzer ("Luccy", 19)); userList.add (neuer Benutzer ("James", 18)); userList.add (neuer Benutzer ("herry", 20)); Collections.sort (Benutzerliste); für (Benutzer Benutzer: Benutzerliste) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} private statische Klasse Benutzer implementiert einen vergleichbaren <user> {privaten String -Namen; privates int Alter; public user (string name, int ay) {this.name = name; this.age = Alter; } @Override public int vergleicheto (user Another) {int CompueName = this.name.comPareto (andere.getName ()); if (vergleichName == 0) {return (this.age == Another.getage ()? 0: (this.age> Another.getage ()? 1: -1)); } return vergleichenname; } public String getName () {return name; } public int getage () {return ay; }}}Nach der Ausführung ist die Ausgabe:
XML -Code:
Herry 19 Herry 20 Jack 19 James 18 James 19 Jim 19 Luccy 19 Lucy 19
Es ist ersichtlich, dass nur zwei Punkte benötigt werden
A. Von vergleichbar geerbt
Java -Code
Private Static Class User implementiert vergleichbar <Benutzer>
B. Implementieren Sie die Vergleichsmethode
Das obige öffentliche int vergleiche (Benutzer ein anderer) ist Gegenstand des Vergleichs
Sie können sehen, dass int vergleiche = this.name.comPareto (andere.getName ()); bedeutet den Vergleichsnamen
Wenn es größer als oder zurückgegeben ist, ist es gleich zurückzusetzen, und wenn es geringer ist als es, wird es -1 zurückgegeben .
Wenn gleich, vergleichen Sie nach der Größe des int -Alters.
Das obige ist größer oder gleich zur Rückkehr 1, und das oben genannte ist weniger als Renditen -1, was auch die Grundlage für den Binarysort -Vergleich ist.
3.. Verwenden Sie die überlastete Funktion von Sammlungssortieren, um benutzerdefinierte Objekte zu sortieren
Der Code ist wie folgt, und die Namen werden immer noch zuerst verglichen, wenn sie gleich sind, dann wird der Altersausgang verglichen
Java -Code
public class pootest {public static void main (String [] args) {list <Unter> userList = new ArrayList <Beus> (); userList.add (neuer Benutzer ("Lucy", 19)); userList.add (neuer Benutzer ("Jack", 19)); userList.add (neuer Benutzer ("jim", 19)); userList.add (neuer Benutzer ("James", 19)); userList.add (neuer Benutzer ("herry", 19)); userList.add (neuer Benutzer ("Luccy", 19)); userList.add (neuer Benutzer ("James", 18)); userList.add (neuer Benutzer ("herry", 20)); Collectionss.sort (UserList, New CompueL <Benerhöhle> () {public int compare (user user1, user user2) {int vergleicheName = user1.getName (). Vergleicheto (user2.getName ()); if (vergleicheName == 0) {return (user1.getage () == user2.-1Getage () | vergleiche;}}); für (Benutzer Benutzer: Benutzerliste) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} private statische Klasse Benutzer {privater String -Name; privates int Alter; public user (string name, int ay) {this.name = name; this.age = Alter; } public String getName () {return name; } public int getage () {return ay; }}}Sie können das sehen
Java -Code
Collectionss.sort (UserList, New Comparator <Benerhöhle> ())
Es ist Gegenstand des Vergleichs und implementiert die Vergleichsmethode des Komparators. Das Folgende ist das Prinzip dieser Methode
Kollektionen verfolgen
Java -Code
öffentliche statische <t> void -Sortierung (Liste <T> Liste, Vergleiche <? Super T> C)
ankommen
Java -Code
öffentliche statische <t> void Sortierung (T [] A, Vergleicher <? Super T> C)
ankommen
Java -Code
Private statische Leere mergesorts (Objekt [] SRC, Objekt [] dest, int niedrig, int hoch, int off, vergleicher c)
Sie finden den Code wie folgt:
Java -Code
if (Länge <Insertionsort_threshold) {für (int i = low; i <hoch; i ++) für (int j = i; j> low && c.comPare (dest [j-1], dest [j])> 0; j-) swap (dest, j, j-1); zurückkehren; }Rufen Sie die Vergleichsmethode des Vergleichs auf
4. Vergleich der beiden oben genannten Sortiervorstellungen
Binarysort muss NLG (n) -Ge -Vergleiche und im schlimmsten Fall n^2 Bewegungen durchführen
Mergesort führt ständig binäre Abteilungen durch und nach der Unterteilung der binären Abteilungen in kleine Teile wird sie eingefügt und sortiert. Daher werden die NLG (n) -Fzeiten verglichen und die NLG (n) -Zeiten werden bewegt . Es muss jedoch zuerst eine Kopie der Quelldaten kopieren, damit sie doppelt so hoch ist
Sie können also nach Ihren Anforderungen wählen
In dem obigen Artikel werden kurz die Reihenfolge von Objektarrays oder Listen erörtert, und die Sortierprinzipien von Sammlungen sind der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.