1. 程式人生 > 程式設計 >Comparator 和 Comparable 的比較與用法

Comparator 和 Comparable 的比較與用法

先大體看一下這兩個介面各自的區別:

  1. Comparable是排序介面,常用於自然排序;若一個類實現了Comparable介面,就意味著“該類支援排序”。

  2. Comparator是比較器,常用於需要對排列的順序進行精確控制的情況;我們若需要控制某個類的多個物件的次序,可以建立一個“該類的比較器”來進行排序。

通過程式碼來細看它們的不同實現與作用

內部比較器 comparable 主要程式碼


public class Dayimplements Comparable {

    private int year;

    public Day(int year) {

        this
.year = year; } /** * @desc 重寫compareTo函式。通過year來比較,如果return 的大於0 則當前類排在比較類的後面 * 如果return 的小於0 則當前類排在比較類的前面 */ public int compareTo(Day otherDay) { return year - otherDay.year; } @Override public String toString() { return "year="
+year; } public int getYear() { return year; } } 複製程式碼

外部比較器 comparator 主要程式碼


public class AscOperation implements Comparator<Day> {

    /**

         * @desc compare函式。通過year來比較,如果return 的大於0 則前一位排在後一位的後面

        * 為升序,如果return 的小於0 則前一位排在後一位的的前面,為降序

    */

        public
int compare(Day day1,Day day2)
{ return day1.getYear() - day2.getYear(); } } 複製程式碼

客戶端呼叫程式碼


public class Main {

    public static void main(String[] args){

        List days =new ArrayList();

        days.add(new Day(2018));

        days.add(new Day(2017));

        days.add(new Day(2019));

        //內部實現排序

        Collections.sort(days);

        System.out.printf("list:%s\n",days);

        //依靠外部方法實現排序

        Collections.sort(days,new DescOperation());

        System.out.printf("list:%s\n",days);

        Collections.sort(days,new AscOperation());

        System.out.printf("list:%s\n",days);

    }

}

複製程式碼

具體工程程式碼可以到我的github地址上看

github