0
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 中的异常:未解决的编译问题:Collections 类型中的方法 sort(List) 不适用于参数 (PriorityQueue)

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

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

4

2 回答 2

3

Collections.sort(List<E>)只接受List实现类。 java.util.LinkedList实现List接口,其中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());

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

PriorityQueue pq = new PriorityQueue(initialcapacity, Comparator);

并阅读有关java.util.Comparator

于 2012-11-12T12:09:02.187 回答
0

Collections.sortCollections只能将列表作为参数,这在课堂上没有任何意义。可悲的是虽然PriorityQueue是一个Collection,但它没有实现List

于 2012-11-12T12:12:51.113 回答