Wenn die sortierte Sammlung oder das Array kein einfacher numerischer Typ ist, können Sie in der Regel den Komparator verwenden oder vergleichbar mit der Implementierung von Objektsortierungen oder benutzerdefinierter Sortierung auf einfache Weise.
Eine Vergleichsfunktion, die einer Sammlung von Objekten eine Gesamtreihenfolge auferlegt. Komparatoren können an eine Sortiermethode (z. B. Sammlungen.Sort oder Arrays.sort) übergeben werden, um eine präzise Kontrolle über die Sortierreihenfolge zu ermöglichen. Komparatoren können auch verwendet werden, um die Reihenfolge bestimmter Datenstrukturen (z. B. sortierte Sets oder sortierte Karten) zu steuern oder um eine Bestellung für Sammlungen von Objekten bereitzustellen, die keine natürliche Reihenfolge haben. ------ API
Sie können die String -Liste direkt sortieren, da das String -Objekt uns geholfen hat, die vergleichbare Schnittstelle zu implementieren. Wenn unsere Person sortieren möchte, müssen wir auch einen Komparator implementieren.
1. Vergleicher
Sortieren Sie in der LinkedList gespeicherte Objekte
import Java.util.comParator; import Java.util.linkedList; Klasse Person {private float Height; privater Zeichenfolge Name; Person (Schwimmhöhe) {this.height = Höhe; } public float getheight () {return height; } public void setheight (Float Height) {this.height = Höhe; } public String getName () {return name; } public void setName (String -Name) {this.name = name; }} class personheight implements vergleicher <person> {@Override // Schreiben Sie die Vergleichsmethode neu, return <0 bleibt unverändert, return> 0 wird unter Sequenz ausgetauscht (aufsteigender Reihenfolge halten) public int compare (Person E1, Person E2) {if (e1.getheighthy) <e2.getheight () {) {) {) {) {) {) {); } else {return -1; }}} public class Frage3 {public static void main (String [] args) {Person p1 = neue Person (23.4f); p1.setName ("Stud1"); Person P2 = neue Person (2,34F); p2.SetName ("Stud2"); Person P3 = neue Person (34,32F); p3.setName ("Stud3"); Person p4 = neue Person (56,45f); p4.setName ("Stud4"); Person p5 = neue Person (21,4f); p5.setName ("Stud5"); LinkedList <Person> al = new LinkedList <Person> (); Al.Add (P1); Al.Add (P2); Al.Add (p3); Al.Add (P4); Al.Add (p5); // rufen Sie die Sortiermethode an, um Sortierkollektionen zu implementieren. // Die Ausgabe für (Person p: al) system.out.println (p.getName ()) wenden; }}
Beigefügt:
// Sortieren Sie das Datum/*** Wenn O1 kleiner als O2 ist, geben Sie eine negative Zahl zurück. Wenn O1 größer als O2 ist, geben Sie eine positive Zahl zurück; Wenn sie gleich sind, geben Sie 0 zurück; */@Oversidepublic int compare (Schritt O1, Schritt O2) {Datum AcceptTime1 = Utiltool.strtodate (O1.getAcecepttime (), null); Datum AcceptTime2 = Utiltool.strtodate (O2.GetAcceptTime (), NULL); // Wenn Sie das Datumsfeld steigen, können Sie die vorab methode verwenden, wenn (AcceptTime1.After (AcceptTime2)) zurücksend 1; return -1;}2. vergleichbar
import Java.util.Collections; Import java.util.comParator; import java.util.linkedList; Klasse Person implementiert vergleichbar {private float height; privater Zeichenfolge Name; Person (Schwimmhöhe) {this.height = Höhe; } public float getheight () {return height; } public void setheight (Float Height) {this.height = Höhe; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } @Override public int vergleicheto (Objekt o) {// todo automatisch generierte Methode Stub if (this.height> ((Person) o) .Height) {return 1; } sonst return -1; }} public class Frage3 {public static void main (String [] args) {Person p1 = new Person (23.4f); p1.setName ("Stud1"); Person P2 = neue Person (2,34F); p2.SetName ("Stud2"); Person P3 = neue Person (34,32F); p3.setName ("Stud3"); Person p4 = neue Person (56,45f); p4.setName ("Stud4"); Person p5 = neue Person (21,4f); p5.setName ("Stud5"); LinkedList <Person> al = new LinkedList <Person> (); Al.Add (P1); Al.Add (P2); Al.Add (p3); Al.Add (P4); Al.Add (p5); Sammelns.sort (Al); für (Person p: al) system.out.println (p.getName ()); }}Drei. Vergleich
Vergleichbar ist in der Personklasse definiert.
Der Komparator ist außerhalb der Person definiert. Zu diesem Zeitpunkt muss sich die Struktur unserer Personklasse nicht ändern.
Die beiden Methoden haben ihre eigenen Vor- und Nachteile. Es ist einfach vergleichbar zu verwenden. Solange das Objekt, das die vergleichbare Schnittstelle implementiert, zu einem vergleichbaren Objekt wird, muss der Quellcode geändert werden. Der Vorteil der Verwendung von Comparator besteht darin, dass es nicht erforderlich ist, den Quellcode zu ändern, sondern einen Komparator. Wenn ein benutzerdefiniertes Objekt verglichen werden muss, können Sie die Größe vergleichen, indem Sie den Komparator und das Objekt zusammengeben. Im Vergleicher können Benutzer eine komplexe und allgemeine Logik selbst implementieren, damit sie mit einigen relativ einfachen Objekten übereinstimmen können, die viele sich wiederholende Arbeiten sparen können.