我有学生班。它的主要实例变量是Name,ID,Score。 使用proirityQueue按分数对学生对象进行排序的最佳方法是什么? 或者我应该说,我听说一般的PriorityQueue有密钥和值,我希望我的密钥成为分数。
答案 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以获取有关如何操作的详细信息。