Java中實現Comparable介面和Comparator介面的排序演算法效率比較
阿新 • • 發佈:2019-02-04
在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介面的排序演算法效率更高。但是它的本質原因,我現在還不清楚。
當然,我的程式碼待改進的地方還很多,待續。