在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接口的排序算法效率更高。但是它的本质原因,我现在还不清楚。
当然,我的代码待改进的地方还很多,待续。