PriorityQueue排序

时间:2012-11-12 12:04:31

标签: java sorting priority-queue

public class Flight implements Comparable {

...

public int compareTo(Object obj){
    Flight f = (Flight) obj;
    Integer i1 = (Integer) f.priority;
    Integer i2 = (Integer) priority;
    if(f == null)
        return 1;
    else 
        return i2.compareTo(i1);
}

...

public class JavaPriorityFlightQueue {


    public PriorityQueue flights;

...

public void joinQueue(Flight f){
        flights.add(f);
        Collections.sort(flights);
    }   

.....

线程“main”中的异常java.lang.Error:未解决的编译问题:     类型集合中的方法sort(List)不适用于参数(PriorityQueue)

at section3.JavaPriorityFlightQueue.joinQueue(JavaPriorityFlightQueue.java:31)
at section3.FlightTest003.main(FlightTest003.java:19)

我使用完全相同的compareTo作为LinkedList并且它可以工作,并且一切都是一样的我没有错过任何东西(我认为)。我不明白它对LinkedList有何用处,但不理解PriorityQueue。

2 个答案:

答案 0 :(得分:3)

Collections.sort(List<E>)仅接受列表实施类。 java.util.LinkedList 实现列表接口,其中 Priorityqueue 不实现List。 例如:

PriorityQueue<String> pq = new PriorityQueue<String>();
        Collections.sort(pq);//compiler error here sort expects a List not priorityQueue

检查Collections.sort(List)签名

使用Sort方法对优先级队列进行排序的一种方法是将priorityqueue转换为Array并使用Arrays.sort()。

Arrays.sort(pq.toArray());

或使用PQ的构造函数,它将Comparator作为第二个参数。

PriorityQueue pq = new PriorityQueue(initialcapacity, Comparator);

并阅读java.util.Comparator

答案 1 :(得分:0)

Collections.sort只能将列表作为参数,这在Collections类中并不真正有意义。遗憾的是,虽然PriorityQueueCollection,但它没有实现List