Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中按优先级队列排序学生成绩_Java_Sorting_Key_Priority Queue - Fatal编程技术网

java中按优先级队列排序学生成绩

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对象的分数进行比较 然后使

我有学生课。它的主要实例变量是Name、ID、Score。 使用proirityQueue按分数对学生对象排序的最佳方法是什么?
或者我应该说,我听说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,了解如何正确实现比较方法的具体示例。