Java PriorityQueue比较器-如何/何时排序? [英] Java PriorityQueue Comparator - How/When do you sort?
本文介绍了Java PriorityQueue比较器-如何/何时排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在初始化一个优先级队列,例如:
I'm initialising a Priority Queue like:
strategy = new FuelPriority();
incoming = new PriorityQueue<Vehicle>(1, strategy);
我的Comparator类的代码为:
The code for my Comparator class is:
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
类的compare方法中设置了一个断点,但根本没有调用它。
我在这里缺少什么吗?
After running a simulation, the elements aren't ordered at all - they are random; I set a breakpoint in the compare method of my FuelPriority
class, but it wasn't called at all.
Am I missing something here?
推荐答案
除了您的代码中的错字,它对我也有用。
Aside from the typo on your code, it works for me.
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;
}
}
这篇关于Java PriorityQueue比较器-如何/何时排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文