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。
答案 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
使用Sort方法对优先级队列进行排序的一种方法是将priorityqueue转换为Array并使用Arrays.sort()。
Arrays.sort(pq.toArray());
或使用PQ的构造函数,它将Comparator作为第二个参数。
PriorityQueue pq = new PriorityQueue(initialcapacity, Comparator);
答案 1 :(得分:0)
Collections.sort
只能将列表作为参数,这在Collections
类中并不真正有意义。遗憾的是,虽然PriorityQueue
是Collection
,但它没有实现List
。