O comparador é uma interface, que pode substituir os dois métodos de compare () e equals () para função de comparação de preços; Se for nulo, ele usa a ordem padrão dos elementos, como A, B, C, D, E, F, G, isto é, A, B, C, D, E, F, G, é claro, o mesmo é verdadeiro para números.
Compare (a, b) Método: Retorne o número inteiro negativo, zero ou positivo de acordo com o primeiro parâmetro, que é menor que, igual ou maior que o segundo parâmetro.
Método igual (OBJ): retorne verdadeiro apenas se o objeto especificado também for um comparador e o mesmo tipo que esse comparador for forçado a ser implementado.
O segundo parâmetro do coleções.Sort (List, New PriceComparator ()); Retorna um valor do tipo int, que é equivalente a um sinalizador, informando o método de classificação em que ordem classificar a lista.
O método específico do código de implementação é o seguinte:
Classe de entidade do livro:
pacote com.tjcyjd.comparator; importar java.text.decimalformat; importar java.text.simpledateFormat; importar java.util.gregorianCalendar; importar java.util.iterator; importar java.util.treemap; / ** * Classe de entidade do livro * * @Author YJD * */ Public Class Book implementa comparável {// Definir uma classe chamada livro, que é herdada por padrão da classe Object public int id; // Número public string Nome; // Nome do preço duplo público; // preço de string privada autor; // Autor public GregoriaRiaCalendar Calendário; // Data de publicação Public Book () {this (0, "X", 0.0, New Gregoriancalendar (), ""); } Public Book (int id, nome da string, preço duplo, calendário GregoriaNELEndar, Autor da String Author) {this.id = id; this.name = nome; this.price = preço; this.Calendar = calendário; this.author = autor; } // Reescreva o método herdado do objeto da classe pai para atender aos requisitos da classe do livro Informações Descrição Public string tostring () {string showtr = id + "/t" + nome; // Defina a string que exibe as informações da classe decimalformat formatprice = new DecimalFormat ("0,00"); // Preço de formato para dois lugares decimais showstr + = "/t" + formatprice.format (preço); // Preço de formato Showstr + = "/t" + autor; SimpledateFormat formatDate = new SimpleDateFormat ("AA YYYY ANO MM Mês DD DIA"); showstr + = "/t" + formatdate.format (calendar.gettime ()); // Formato de tempo de retorno de tempo mostra; // Return classe Information String} public int compareto (object obj) {// Método em Livro de Interface Comparável B = (Book) Obj; devolver this.id - B.id; // Compare o tamanho de acordo com o ID do livro, usado para a classificação padrão} public static void main (String [] args) {livro b1 = novo livro (10000, "Dream of the Red Chamber", 150.86, New Gregoriancalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Livro B2 = Novo Livro (10001, "Romance of the Three Kingdoms", 99,68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Livro B3 = Novo Livro (10002, "Margem de Água", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Livro B4 = Novo Livro (10003, "Journey to the West", 120,8, New Gregoriancalendar (2011, 6, 8), "Wu Cheng'en"); Livro B5 = Novo livro (10004, "The Legend of the Condor Heroes", 10.4, New Gregoriancalendar (2011, 9, 23), "Sohu"); Treemap tm = new Treemap (); tm.put (B1, novo número inteiro (255)); tm.put (B2, novo número inteiro (122)); tm.put (B3, novo número inteiro (688)); tm.put (B4, novo número inteiro (453)); tm.put (b5, novo número inteiro (40)); Iterator it = tm.KeySet (). Iterator (); Chave de objeto = nulo, valor = nulo; Livro bb = nulo; while (it.hasnext ()) {key = it.next (); chave BB = (livro); valor = tm.get (chave); System.out.println (bb.toString () + "/t inventário:" + tm.get (chave)); }}} Comparador personalizado e aulas de teste:
pacote com.tjcyjd.comparator; importar java.util.arraylist; importar java.util.Collections; importar java.util.comparator; importar java.util.gregorianCalendar; importar java.util.iterator; importar java.util.list; public classe usecomparator {public static void main (string args []) {list <Book> list = new ArrayList <Book> (); // Livro da sequência de array B1 = novo livro (10000, "Dream of Red Mansions", 150,86, New GregorianCalendar (2009, 01, 25), "Cao Xueqin, Gao E"); Livro B2 = Novo Livro (10001, "Romance of the Three Kingdoms", 99,68, New Gregoriancalendar (2008, 7, 8), "Luo Guanzhong"); Livro B3 = Novo Livro (10002, "Margem de Água", 100,8, New Gregoriancalendar (2009, 6, 28), "Shi Nai'an"); Livro B4 = Novo Livro (10003, "Journey to the West", 120,8, New Gregoriancalendar (2011, 6, 8), "Wu Chengen"); Livro B5 = Novo Livro (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); // coleções.sort (lista); // Não há comparador padrão, System.out.println ("Elementos em uma sequência de matriz:"); myprint (lista); Coleções.Sort (List, New PriceComparator ()); // classificar por preços System.out.println ("classificado pelo preço do livro:"); myprint (lista); Coleções.Sort (List, New CalendarComparator ()); // classificar por tempo System.out.println ("classificado por livro public static void myPrint (list <livrow> list) {iterator it = list.iterator (); // Obtenha um iterador para atravessar todos os elementos no ITERTOR, (It.hasnext ()) {//Pran, se houver um elemento no ITERTATOR, TRUSTS SISTEMING. It.Next ()); // Mostrar este elemento}} // Comparador personalizado: Classifique pelo preço do livro estático, o comparador do PriceComparator {public int compare (Object Object1, Object2) {// Implementar o Método no Objeto de Interface P1 = (Livro); Dupla (p2.price); no livro de interface P1 = (livro) objeto1; // Livro de fundição P2 = (livro) objeto2; return p2.calendar.compareto (p1.calendar); }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.