Comparator ist eine Schnittstelle, die die beiden Methoden von Compare () und Equals () zur Preisvergleichsfunktion überschreiben kann. Wenn es sich um Null handelt, verwendet es die Standardreihenfolge von Elementen wie A, B, C, D, E, F, G, dh a, b, c, d, e, f, g, natürlich gilt das gleiche gilt für Zahlen.
Vergleichen Sie (a, b) Methode: Return Negative Ganzzahl, Null oder positive Ganzzahl gemäß dem ersten Parameter, der weniger als der zweite Parameter ist.
Equals (OBJ) -Methode: Return nur, wenn das angegebene Objekt ebenfalls ein Komparator ist und dieselbe Sortierung wie dieser Komparator ist, um implementiert zu werden.
Der zweite Parameter für Sammlungen.Sort (Liste, neuer PriceComparator ()); Gibt einen INT-Wert zurück, der einem Flag entspricht und die Sortiermethode in welcher Reihenfolge für die Sortierung der Liste entspricht.
Die spezifische Implementierungscode -Methode lautet wie folgt:
Buchentitätsklasse:
Paket com.tjcyjd.comParator; importieren java.text.decimalformat; Java.Text.SimpledateFormat importieren; Import Java.util.gregoriancalendar; Import Java.util.iterator; Import Java.util.Treemap; / ** * Buchentitätsklasse * * @author yjd * */ public class book implementiert vergleichbar {// eine Klasse namens Buch definieren, die standardmäßig aus der Objektklasse öffentliche int id; // number öffentliche Zeichenfolge Name; // Name öffentlich -doppelter Preis; // Price Private String Autor; // Autor Public Gregoriancalendar Calendar; // Veröffentlichungsdatum Public Book () {this (0, "x", 0.0, New Gregoriancalendar (), ""); } public book (int id, Zeichenfolge Name, Doppelpreis, Gregoriancalendar -Kalender, String -Autor) {this.id = id; this.name = name; this.price = Preis; this.calendar = Kalender; this.author = Autor; } // Schreiben Sie die vom übergeordnete Klassenobjekt geerbte Methode um, um die Anforderungen der Buchklasseninformation zu erfüllen. // Definieren Sie die Zeichenfolge, die die Klasseninformationsdecimalformat formatprice = new DecimalFormat ("0,00"); // Formatpreis für zwei Dezimalstellen Showstr + = "/t" + + formatprice.format (Preis); // Format Preis Showstr + = "/t"/t "/t"/t " + Author; SimpleDateFormat FormatDate = new SimpledateFormat ("Yyyy Year Mm Monat DD Day"); showStr + = "/t" + formatdate.format (calendar.getTime ()); // Formatzeit Return Showstr; // Klasseninformationsstring} public int vergleicheto (Objekt obj) {// Methode in vergleichbarem Schnittstellenbuch b = (Buch) obj; kehre this.id - b.id; // Vergleiche die Größe nach der ID des Buches, die für die Standardsortierung verwendet wird} Public static void main (String [] args) {Buch B1 = neues Buch (10000, "Dream of the Red Chamber", 150,86, New Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Buch B2 = neues Buch (10001, "Romantic of the Three Kingdoms", 99,68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Buch B3 = neues Buch (10002, "Wassermargin", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Buch B4 = neues Buch (10003, "Reise nach Westen", 120,8, New Gregoriancalendar (2011, 6, 8), "Wu Cheng'en"); Buch B5 = neues Buch (10004, "The Legend of the Condor Heroes", 10.4, New Gregoriancalendar (2011, 9, 23), "Sohu"); TREEMAP TM = NEU TREEMAP (); TM.PUT (B1, New Integer (255)); tm.put (B2, neue Ganzzahl (122)); tm.put (B3, New Integer (688)); tm.put (B4, New Integer (453)); TM.PUT (B5, neue Ganzzahl (40)); Iterator it = tM.Keyset (). Iterator (); Objektschlüssel = null, value = null; Buch BB = NULL; while (it.hasnext ()) {key = it.next (); BB = (Buch) Schlüssel; value = tm.get (Schlüssel); System.out.println (BB.ToString () + "/t Inventory:" + tm.get (Schlüssel)); }}} Benutzerdefinierte Vergleichs- und Testklassen:
Paket com.tjcyjd.comParator; Import Java.util.ArrayList; Import Java.util.Collections; Java.util.comParator importieren; Import Java.util.gregoriancalendar; Import Java.util.iterator; importieren java.util.list; öffentliche Klasse UsComparator {public static void main (String args []) {list <Book> list = new ArrayList <Book> (); // Array -Sequenzbuch B1 = neues Buch (10000, "Dream of Red Mansions", 150,86, New Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Buch B2 = neues Buch (10001, "Romantic of the Three Kingdoms", 99,68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Buch B3 = neues Buch (10002, "Wassermargin", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Buch B4 = neues Buch (10003, "Reise nach Westen", 120,8, New Gregoriancalendar (2011, 6, 8), "Wu Chengen"); Buch B5 = neues Buch (10004, "Tianlong Baba", 10.4, New Gregoriancalendar (2011, 9, 23), "Sohu"); list.add (B1); list.add (b2); list.add (b3); list.add (b4); list.add (b5); // Collections.sort (Liste); // Es gibt keinen Standardvergleich, System.out.println ("Elemente in einer Array -Sequenz:"); MyPrint (Liste); Collections.sort (Liste, neuer PriceComparator ()); // sortieren nach price system.out.println ("sortiert nach Buchpreis:"); MyPrint (Liste); Collections.sort (Liste, neuer Kalenderkomplexator ()); // sortieren nach Zeitsystem.out.println ("sortiert durch buchpublisches statisches void myprint (list <book> list) {iterator it = list.iterator (); // Holen Sie sich einen Iterator für das Durchqueren aller Elemente in der Liste (It.HasNext ()) {// Wenn es ein Element in der ITerator -IT -IT -IT -IT -System zurückgibt. IT.Next ()); // dieses Element anzeigen}} // benutzerdefinierte Vergleiche: Sortieren Sie nach dem Preis des Buches statische Klasse Pricecomparator implementiert Compue " Double (p2.price)); im Schnittstellenbuch p1 = (Buch) Objekt1; // Casting Book p2 = (Buch) Objekt2; return p2.calendar.comPareto (p1.calendar); }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.