在java中按优先级排序学生分数

时间:2013-12-11 22:09:01

标签: java sorting key priority-queue

我有学生班。它的主要实例变量是Name,ID,Score。 使用proirityQueue按分数对学生对象进行排序的最佳方法是什么? 或者我应该说,我听说一般的PriorityQueue有密钥和值,我希望我的密钥成为分数。

2 个答案:

答案 0 :(得分: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

更新:执行此操作的另一种方法是让Student实施java.lang.Comparable,正如Edgar Boda建议的那样。

如果要为所有学生对象应用相同的排序规则,无论他们在哪个队列(或列表或任何可排序的)中,这种方法可能会更方便。但是,如果您希望对不同的队列使用不同的规则(例如,当您有2个队列时,一个基于分数,另一个基于名称),使用比较器的方法提供了更大的灵活性。

答案 1 :(得分:3)

您可以让Student类实现Comparable界面,然后使用PriorityQueue。阅读javadocs以获取有关如何操作的详细信息。