Le comparateur est une interface, qui peut remplacer les deux méthodes de compare () et equals () pour la fonction de comparaison des prix; S'il est nul, il utilise l'ordre par défaut des éléments, tels que A, B, C, D, E, F, G, c'est-à-dire, a, b, c, d, e, f, g, bien sûr, il en va de même pour les nombres.
Comparez (A, B) Méthode: retour entier négatif, zéro ou entier positif selon le premier paramètre, qui est inférieur, égal ou supérieur au deuxième paramètre.
Equals (OBJ) Méthode: Renvoie True uniquement si l'objet spécifié est également un comparateur et le même type que ce comparateur est obligé d'être implémenté.
Le deuxième paramètre de Collection.Sort (liste, nouveau priceCompparator ()); Renvoie une valeur de type int, ce qui équivaut à un drapeau, indiquant la méthode de tri dans quel ordre trier la liste.
La méthode du code d'implémentation spécifique est la suivante:
Classe d'entité de livre:
package com.tjcyjd.comparateur; import java.text.decimalformat; import java.text.simpledateFormat; import java.util.gregoriancalendar; Importer java.util.iterator; import java.util.treemap; / ** * Classe d'entité de livre * * @author yjd * * / public class book implémente comparable {// définir une classe nommée livre, qui est héritée par défaut de la classe d'objet public int id; // numéro de chaîne publique nom; // nom public double prix; // Prix Private String Auteur; // Auteur public GregorianCalendar Calendar; // Date de publication Livre public () {This (0, "X", 0.0, New GregorianCalendar (), ""); } livre public (int id, nom de chaîne, double prix, calendrier GregorianCalendar, auteur de chaîne) {this.id = id; this.name = name; this.price = prix; this.calendar = calendrier; this.author = auteur; } // Réécrivez la méthode héritée de l'objet de classe parent pour répondre aux exigences des informations de classe de livre Description publique String toString () {String showstr = id + "/ t" + name; // Définissez la chaîne qui affiche les informations de classe decimalformat formatprice = new Decimalformat ("0.00"); // Price de format à deux décimales showstr + = "/ t" + formatprice.format (prix); // prix de format showstr + = "/ t" + auteur; SimpledateFormat Formatdate = new SimpledateFormat ("Yyyy Year Mm Month DD Day"); showstr + = "/ t" + formatdate.format (calendar.getTime ()); // Format Time Return showstr; // RETOUR CLASSE Information String} public int compareTo (objet obj) {// Méthode dans le livre d'interface comparable b = (livre) obj; Renvoyez ceci.id - B.ID; // Comparez la taille en fonction de l'ID du livre, utilisé pour le tri par défaut} public static void main (String [] args) {book b1 = nouveau livre (10000, "Dream of the Red Chamber", 150.86, New Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Livre B2 = nouveau livre (10001, "Romance of the Three Kingdoms", 99.68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Livre B3 = nouveau livre (10002, "Water Margin", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Livre B4 = nouveau livre (10003, "Journey to the West", 120,8, New GregorianCalendar (2011, 6, 8), "Wu Cheng'en"); Livre B5 = nouveau livre (10004, "The Legend of the Condor Heroes", 10.4, New Gregoriancalendar (2011, 9, 23), "Sohu"); Treemap tm = new Treemap (); TM.PUT (B1, nouvel entier (255)); TM.PUT (B2, nouvel entier (122)); TM.PUT (B3, nouvel entier (688)); TM.PUT (B4, nouvel entier (453)); TM.PUT (B5, nouvel entier (40)); Iterator it = tm.KeySet (). Iterator (); Clé d'objet = null, valeur = null; Livre bb = null; while (it.hasnext ()) {key = it.next (); BB = (livre) clé; valeur = tm.get (clé); System.out.println (bb.toString () + "/ t Inventory:" + tm.get (key)); }}} Classes de comparateur et de test personnalisés:
package com.tjcyjd.comparateur; import java.util.arraylist; Importer java.util.collections; Importer java.util.comparator; import java.util.gregoriancalendar; Importer java.util.iterator; Importer java.util.list; classe publique UseComparator {public static void main (String args []) {list <book> list = new ArrayList <Book> (); // Livre de séquence de tableaux B1 = nouveau livre (10000, "Dream of Red Mansions", 150.86, New GregorianCalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Livre B2 = nouveau livre (10001, "Romance of the Three Kingdoms", 99.68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Livre B3 = nouveau livre (10002, "Water Margin", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Livre B4 = nouveau livre (10003, "Journey to the West", 120,8, New Gregoriancalendar (2011, 6, 8), "Wu Chengen"); Livre B5 = nouveau livre (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); // Collection.Sort (liste); // Il n'y a pas de comparateur par défaut, System.out.println ("Éléments dans une séquence de tableau:"); myprint (liste); Collection.Sort (List, New PriceCaparator ()); // Trier par prix System.out.println ("Trié par prix du livre:"); myprint (liste); Collection.Sort (liste, nouveau calendarcomparator ()); // Trier par Time System.out.println ("Trated by book public static void myprint (list <book> list) {iterator it = list.iterator (); // Obtenez un itérateur pour traverser tous les éléments dans la liste tandis que (il renvoie le System.out.out.out.trint (" / t "+ it.next ()); // Afficher cet élément}} // Comparateur personnalisé: Trier par le prix du livre Static Class PriceCaparator implémente le comparateur {public int compare (objet objet1, objet objet2) {// Implémentez la méthode dans le livre d'interface P1 NEW DOUBLE (P1.PRICE). Double (P2.Price));}} // Implémentez la méthode dans le livre d'interface P1 = (Book) Object1; Dans le livre d'interface p1 = (livre) objet1; // Book de casting p2 = (livre) Object2; retour p2.calendar.compareto (p1.calendar); }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.