Java优先级队列排序

时间:2014-03-30 22:23:21

标签: java priority-queue

我有PriorityQueue名为Incoming,其中包含Vehicle类型的对象。

您可以在所有getFuelLevel()上调用方法Vehicles

我想要做的是对Incoming进行排序,以便Vehicles fuel Comparator的优先级更高,并放在队列的前面。

我假设我必须在这里使用{{1}},但不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

在我自己的类中使用PriorityQueue时,我总是做的一件事就是使该类实现Comparable<Class>。有了这个,你需要实现的只是类中的int compareTo(Class o)方法而不是需要实现Comparator,它返回“负整数,零或正整数,因为这个对象小于,等于,或者大于指定的对象。“

在你的情况下,如果Vehicles的燃料少于输入的Vehicles,则返回1,如果两者相同,则返回0;如果Vehicles有更多,则返回-1燃料比输入的燃料好。

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

答案 1 :(得分:1)

PriorityQueue类有一个构造函数,它以Comparator为参数。您可以通过提供特定的PriorityQueue

来构建Comparator
PriorityQueue<Vehicle> queue = new PriorityQueue<Vehicle>(initialCapacity, new Comparator<Vehicle> {
    int compare(Vehicle a, Vehicle b) {
        return a.getFuelLevel() - b.getFuelLevel();
    }
});