2013-12-11 88 views

回答

4

要做到這一點,請構建您的ProirityQueue,並通過您的實施java.util.Comparator比較Student對象的分數。

然後使用poll()從隊列中獲得最高/最低分數(取決於您如何在比較器中定義排序規則)的下一個學生。

你應該得到的東西,如:

Comparator<Student> comparator = new Comparator<Student>() { 
    @Override 
    public int compare(Student s1, Student s2) { 
     return (int) (s1.getScore() - s2.getScore()); 
    } 
}; 

Queue<Student> queue = new PriorityQueue<Student>(11, comparator); 

// put some students into queue here ... 

Student firstInQueue = queue.poll(); 

對如何做到這一點更詳細的說明上this tutorial看看。

UPDATE:另一種方式做,這是使你的Student實施java.lang.Comparable,埃德加·博達建議。

如果要應用相同的排序規則對所有的學生對象,無論什麼隊列(或列表或點兒排序),他們是在這種方法可能會更方便。但是,如果你想有不同的不同的規則隊列(例如,當您有兩個隊列,一個基於分數,另一個基於名稱)與比較器的方法提供更大的靈活性。

3

您可以讓您的Student類實現Comparable接口,然後使用PriorityQueue。閱讀javadoc以瞭解如何執行此操作的詳細信息。

+0

Thanx ,,,似乎相似的實現者應該有一個Compareto方法,我的問題是,我不想比較兩個東西,如x,y。我希望實例變量「Score」具有可比性,我會怎麼做? – frequent94

+0

可比性正是你想要的。你想比較你的班級的分數。閱讀javadoc和google,瞭解如何正確實現比較方法的具體示例。 – Blub

相關問題