标签:
 
 
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
具体实现代码方法如下:
Book实体类:
 
- package com.tjcyjd.comparator;  
 
-   
 
- import java.text.DecimalFormat;  
 
- import java.text.SimpleDateFormat;  
 
- import java.util.GregorianCalendar;  
 
- import java.util.Iterator;  
 
- import java.util.TreeMap;  
 
-   
 
- public class Book implements Comparable { 
 
-     public int id;
 
-     public String name;
 
-     public double price; 
 
-     private String author;
 
-     public GregorianCalendar calendar;
 
-   
 
-     public Book() {  
 
-         this(0, "X", 0.0, new GregorianCalendar(), "");  
 
-     }  
 
-   
 
-     public Book(int id, String name, double price, GregorianCalendar calender,  
 
-             String author) {  
 
-         this.id = id;  
 
-         this.name = name;  
 
-         this.price = price;  
 
-         this.calendar = calender;  
 
-         this.author = author;  
 
-     }  
 
-   
 
-     
 
-     public String toString() {  
 
-         String showStr = id + "\t" + name; 
 
-         DecimalFormat formatPrice = new DecimalFormat("0.00");
 
-         showStr += "\t" + formatPrice.format(price);
 
-         showStr += "\t" + author;  
 
-         SimpleDateFormat formatDate = new SimpleDateFormat("yyyy年MM月dd日");  
 
-         showStr += "\t" + formatDate.format(calendar.getTime()); 
 
-         return showStr; 
 
-     }  
 
-   
 
-     public int compareTo(Object obj) {
 
-         Book b = (Book) obj;  
 
-         return this.id - b.id; 
 
-     }  
 
-   
 
-     public static void main(String[] args) {  
 
-         Book b1 = new Book(10000, "红楼梦", 150.86, new GregorianCalendar(2009,  
 
-                 01, 25), "曹雪芹、高鄂");  
 
-         Book b2 = new Book(10001, "三国演义", 99.68, new GregorianCalendar(2008, 7,  
 
-                 8), "罗贯中 ");  
 
-         Book b3 = new Book(10002, "水浒传", 100.8, new GregorianCalendar(2009, 6,  
 
-                 28), "施耐庵 ");  
 
-         Book b4 = new Book(10003, "西游记", 120.8, new GregorianCalendar(2011, 6,  
 
-                 8), "吴承恩");  
 
-         Book b5 = new Book(10004, "天龙八部", 10.4, new GregorianCalendar(2011, 9,  
 
-                 23), "搜狐");  
 
-         TreeMap tm = new TreeMap();  
 
-         tm.put(b1, new Integer(255));  
 
-         tm.put(b2, new Integer(122));  
 
-         tm.put(b3, new Integer(688));  
 
-         tm.put(b4, new Integer(453));  
 
-         tm.put(b5, new Integer(40));  
 
-         Iterator it = tm.keySet().iterator();  
 
-         Object key = null, value = null;  
 
-         Book bb = null;  
 
-         while (it.hasNext()) {  
 
-             key = it.next();  
 
-             bb = (Book) key;  
 
-             value = tm.get(key);  
 
-             System.out.println(bb.toString() + "\t库存:" + tm.get(key));  
 
-         }  
 
-     }  
 
- }  
 
 
自定义比较器和测试类:
 
- package com.tjcyjd.comparator;  
 
-   
 
- import java.util.ArrayList;  
 
- import java.util.Collections;  
 
- import java.util.Comparator;  
 
- import java.util.GregorianCalendar;  
 
- import java.util.Iterator;  
 
- import java.util.List;  
 
-   
 
- public class UseComparator {  
 
-     public static void main(String args[]) {  
 
-         List<Book> list = new ArrayList<Book>(); 
 
-         Book b1 = new Book(10000, "红楼梦", 150.86, new GregorianCalendar(2009,  
 
-                 01, 25), "曹雪芹、高鄂");  
 
-         Book b2 = new Book(10001, "三国演义", 99.68, new GregorianCalendar(2008, 7,  
 
-                 8), "罗贯中 ");  
 
-         Book b3 = new Book(10002, "水浒传", 100.8, new GregorianCalendar(2009, 6,  
 
-                 28), "施耐庵 ");  
 
-         Book b4 = new Book(10003, "西游记", 120.8, new GregorianCalendar(2011, 6,  
 
-                 8), "吴承恩");  
 
-         Book b5 = new Book(10004, "天龙八部", 10.4, new GregorianCalendar(2011, 9,  
 
-                 23), "搜狐");  
 
-         list.add(b1);  
 
-         list.add(b2);  
 
-         list.add(b3);  
 
-         list.add(b4);  
 
-         list.add(b5);  
 
-         
 
-         System.out.println("数组序列中的元素:");  
 
-         myprint(list);  
 
-         Collections.sort(list, new PriceComparator()); 
 
-         System.out.println("按书的价格排序:");  
 
-         myprint(list);  
 
-         Collections.sort(list, new CalendarComparator()); 
 
-         System.out.println("按书的出版时间排序:");  
 
-         myprint(list);  
 
-     }  
 
-   
 
-     
 
-     public static void myprint(List<Book> list) {  
 
-         Iterator it = list.iterator(); 
 
-         while (it.hasNext()) {
 
-             System.out.println("\t" + it.next());
 
-         }  
 
-     }  
 
-   
 
-     
 
-     static class PriceComparator implements Comparator {  
 
-         public int compare(Object object1, Object object2) {
 
-             Book p1 = (Book) object1; 
 
-             Book p2 = (Book) object2;  
 
-             return new Double(p1.price).compareTo(new Double(p2.price));  
 
-         }  
 
-     }  
 
-   
 
-     
 
-     static class CalendarComparator implements Comparator {  
 
-         public int compare(Object object1, Object object2) {
 
-             Book p1 = (Book) object1; 
 
-             Book p2 = (Book) object2;  
 
-             return p2.calendar.compareTo(p1.calendar);  
 
-         }  
 
-     }  
 
- }  
 
 [转]java中Collections.sort排序详解
标签:
原文地址:http://www.cnblogs.com/ZhuRenWang/p/4858590.html