我正在尝试编写一个程序,我使用优先级队列复制注册商的办公室。此优先级队列的排序将基于首先提供的更高GPA等。我已经构建了一个程序,使用我自己的实现来执行此操作,但我很困惑如何实现我的compareTo方法。
//Create Priority Queue
PriorityQueue<Student> pQueue = new PriorityQueue<Student>(10, compareTo());
首先我制作了优先队列。根据文档,我可以指定我用于比较的内容,compareTo()。
但是当我尝试实现compareTo方法时,它不允许我提供任何参数。
private Comparator<? super Student> compareTo(Student x, Student y) {
}
它告诉我&buntarOfficeJavaService中的compareTo无法应用于()&#39;我的IDE提供删除我的参数。但我不明白如何在没有对象比较的情况下进行比较?
我在类中唯一的另一个方法是recieveEvent,它基本上只是确定我是从队列中删除还是添加到队列中。该活动下的数据是我可以比较的学生对象,但我根本不理解如何把它们放在一起。
public void receiveEvent(Event<Student> event) {
if (event.getType() == EventType.REQUEST_COMPLETED){
pQueue.poll();
}
else{
}
}
在一些帮助下,我提出了这种比较方法。但是,当新学生首先在列表中对照学生进行检查时,问题仍然存在,并且他们的GPA不高,它会将该学生附加到列表的末尾而不检查pQueue中的其他学生。
PriorityQueue<Student> pQueue = new PriorityQueue<Student>(10, new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2){
if (o1.equals(o2))
return 0;
else if(o1.getGpa() > o2.getGpa())
return -1;
else
return 1;
}
});
private boolean equals (Student o1, Student o2){
if (o1.getGpa() == o2.getGpa())
return true;
else
return false;
}
答案 0 :(得分:0)
创建实现Comparator
Inteface的新类,并将此类实例传递给优先级队列。
如果您的GPA是Class / Reference Type :(例如Integer,Double,Float),您可以使用以下代码:
PriorityQueue<Student> pQueue = new PriorityQueue<Student>(10, new Comparator<Student> {
@Override
public int compare(Student arg0, Student arg1) {
// TODO Auto-generated method stub
return arg0.getGPA().compareTo(arg1.getGPA());
}
});
如果你的GPA是原始类型:(例如int,double,float)你可以使用以下代码:
@Override
public int compare(Student arg0, Student arg1) {
// TODO Auto-generated method stub
return Integer.compare(arg0.getGPA(),arg1.getGPA());
}
注意:根据您的数据类型替换整数。
compareTo()
不一定仅返回-1,0或1. compareTo()
两个对象的返回0相等,如果obj1 <0,则值小于零。如果obj1> 0,则obj2和大于零的值obj2的。
此方法是内联比较器声明。
答案 1 :(得分:0)
第二个参数需要一个Comparator对象,而不是对compareTo方法的直接调用:
//Create Priority Queue
PriorityQueue<Student> pQueue = new PriorityQueue<Student>(10, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// your logic
}
});
&#34;比较(T o1,T o2)&#34; -Method是该Comparator对象的一部分,必须在一个对象中定义。