java中按优先级队列排序学生成绩
我有学生课。它的主要实例变量是Name、ID、Score。 使用proirityQueue按分数对学生对象排序的最佳方法是什么?java中按优先级队列排序学生成绩,java,sorting,key,priority-queue,Java,Sorting,Key,Priority Queue,我有学生课。它的主要实例变量是Name、ID、Score。 使用proirityQueue按分数对学生对象排序的最佳方法是什么? 或者我应该说,我听说general PriorityQueue有Key和Value,我希望我的Key是Scores。你可以让你的学生班级实现接口,然后使用。阅读javadocs以了解如何执行此操作的详细信息。要执行此操作,请构造您的ProirityQueue并将您的java.util.Comparator实现传递给它,该实现根据Student对象的分数进行比较 然后使
或者我应该说,我听说general PriorityQueue有Key和Value,我希望我的Key是Scores。你可以让你的
学生
班级实现接口,然后使用。阅读javadocs以了解如何执行此操作的详细信息。要执行此操作,请构造您的ProirityQueue
并将您的java.util.Comparator
实现传递给它,该实现根据Student
对象的分数进行比较
然后使用poll()
从队列中选出下一个得分最高/最低的学生(取决于您在comparator中定义排序规则的方式)
你应该得到类似于:
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();
比较器比较器=新比较器(){
@凌驾
公共整数比较(学生s1、学生s2){
返回(int)(s1.getScore()-s2.getScore());
}
};
队列队列=新的优先级队列(11,比较器);
//让一些学生在这里排队。。。
Student firstInQueue=queue.poll();
查看更多关于如何执行此操作的详细说明
更新:另一种方法是让你的学生
实现java.lang.Compariable
,正如Edgar Boda所建议的那样
如果您想对所有学生对象应用相同的排序规则,不管它们在哪个队列(或列表或任何可排序的对象)中,这种方法可能更方便。但是,如果您想对不同的队列使用不同的规则(例如,当您有两个队列时,一个基于分数,另一个基于名称),使用comparator的方法提供了更大的灵活性。Thanx,,,似乎可比较的实现者应该有一个Compareto方法,而我的问题是,我不想比较像x,y这样的两个东西。我希望实例变量“Score”具有可比性。我将如何做到这一点?可比性正是您想要的。你想比较一下你班的分数。阅读javadoc和google,了解如何正确实现比较方法的具体示例。