1. 程式人生 > >Java中實現Comparable介面和Comparator介面的排序演算法效率比較

Java中實現Comparable介面和Comparator介面的排序演算法效率比較

在PAT Basic Level的真題中,有”德才論“這麼一題(點選可開啟題目)。

最開始我是構造了一個學生類,存放學生資訊,實現Comparator介面,遺憾的是,後臺測試時,每一個測試用例皆顯示程式執行超時。

public class Main ...
class Student ...
 
class StuCompare implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        if(o1.gettScore() == o2.gettScore()) {
            if(o1.getmScore() == o2.getmScore())
                return  o2.getRegistration().compareTo(o1.getRegistration());
            else
                return o1.getmScore() - o2.getmScore();
        } else
            return o1.gettScore() - o2.gettScore();
    }  
}

然後,我改成讓Student類實現Comparable介面,程式碼幾乎完全一樣,發現有幾個測試用例通過了。

class Student implements Comparable<Student> {
	/*
           被省略的程式碼
          */
       @Override
	public int compareTo(Student arg0) {
		if(this.tScore == arg0.tScore) {
			if(this.mScore == arg0.mScore)
				return arg0.registration.compareTo(this.registration);
			else
				return this.mScore - arg0.mScore;
		} else
			return this.tScore - arg0.tScore;
	}
}

由此可見,在相同的情況下,實現Comparable介面的排序演算法效率更高。但是它的本質原因,我現在還不清楚。

當然,我的程式碼待改進的地方還很多,待續。