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吗?