Java PriorityQueue Comparator-如何/何时排序?
我正在初始化优先级队列,如:Java PriorityQueue Comparator-如何/何时排序?,java,priority-queue,comparator,Java,Priority Queue,Comparator,我正在初始化优先级队列,如: strategy = new FuelPriority(); incoming = new PriorityQueue<Vehicle>(1, strategy); strategy=new-FuelPriority(); 传入=新优先级队列(1,策略); 我的Comparator类的代码是: public class FuelPriority implements Comparator<Object> { public int com
strategy = new FuelPriority();
incoming = new PriorityQueue<Vehicle>(1, strategy);
strategy=new-FuelPriority();
传入=新优先级队列(1,策略);
我的Comparator类的代码是:
public class FuelPriority implements Comparator<Object> {
public int compare(Object o1, Object o2) {
Vehicle a1 = (Vehicle) o1;
Vehicle a2 = (Vheicle) o2;
return Integer.compare(a1.getFuelLevel(), a2.getFuelLevel());
}
}
公共类FuelPriority实现了Comparator{
公共整数比较(对象o1、对象o2){
车辆a1=(车辆)o1;
车辆a2=(Vheicle)o2;
返回整数.compare(a1.getFuelLevel(),a2.getFuelLevel());
}
}
在运行模拟之后,元素根本没有排序——它们是随机的;我在我的FuelPriority
类的compare方法中设置了一个断点,但根本没有调用它。
我在这里遗漏了什么吗?API说PriorityQueue迭代器不能保证以任何特定顺序遍历优先级队列的元素。只能保证poll、remove、peek和element访问队列头部的元素(最少的元素)除了代码上的拼写错误之外,它对我有效
import java.util.Comparator;
import java.util.PriorityQueue;
public class StackOverflow
{
public static void main(String[] args)
{
FuelPriority strategy = new FuelPriority();
PriorityQueue<Vehicle> incoming = new PriorityQueue<Vehicle>(4, strategy);
incoming.add(new Vehicle("car1", 10));
incoming.add(new Vehicle("car2", 20));
incoming.add(new Vehicle("car3", 15));
incoming.add(new Vehicle("car4", 1));
// to retrieve the elements in order
while (!incoming.isEmpty()) {
System.out.println(incoming.poll());
}
}
}
class FuelPriority
implements Comparator<Object>
{
public int compare(Object o1, Object o2)
{
Vehicle a1 = (Vehicle)o1;
Vehicle a2 = (Vehicle)o2;
return Integer.compare(a1.getFuelLevel(), a2.getFuelLevel());
}
}
class Vehicle
{
private String name;
private int fuelLevel;
public Vehicle(String name, int fuelLevel)
{
this.name = name;
this.fuelLevel = fuelLevel;
}
public int getFuelLevel()
{
return fuelLevel;
}
@Override
public String toString()
{
return name + "=" + fuelLevel;
}
}
import java.util.Comparator;
导入java.util.PriorityQueue;
公共类堆栈溢出
{
公共静态void main(字符串[]args)
{
FuelPriority策略=新的FuelPriority();
PriorityQueue incoming=新的PriorityQueue(4,策略);
新增(新车(“car1”,10));
新增(新车(“car2”,20));
新增(新车(“car3”,15));
新增(新车(“car4”,1));
//按顺序检索元素的步骤
而(!incoming.isEmpty()){
System.out.println(incoming.poll());
}
}
}
级别优先级
执行比较器
{
公共整数比较(对象o1、对象o2)
{
车辆a1=(车辆)o1;
车辆a2=(车辆)o2;
返回整数.compare(a1.getFuelLevel(),a2.getFuelLevel());
}
}
等级车辆
{
私有字符串名称;
私营部门;
公共车辆(字符串名称,整数燃油级别)
{
this.name=名称;
this.fuelevel=fuelevel;
}
public int getfuelevel()
{
返回燃料水平;
}
@凌驾
公共字符串toString()
{
返回名称+“=”+fuelLevel;
}
}
它似乎在排序,但不完全/正确,下面是一次运行的输出:13、16、27、21、19、39、37、50、30、34、64、46、49、72、59、58、55、61、47、73。我在几个不同的种子上尝试过,最低燃油油位始终位于队列的最前面,但我不知道为什么其余对象的顺序不正确。如果要按排序顺序检索值,请使用poll或peek。具体地说,用while(!incoming.isEmpty()){System.out.println(incoming.poll());}@AlexandreSantos更改System.out.println(incoming)你能看看我在这个问题中对PriorityQueue的使用吗?你能看看我在这个问题上使用PriorityQueue吗?