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);
    }   

.....

スレッド「メイン」の例外 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 メソッドを使用してプライオリティ キューをソートする 1 つの方法は、priorityqueue を Array に変換し、Arrays.sort() を使用することです。

Arrays.sort(pq.toArray());

または、Comparator を 2 番目の引数として取る PQ のコンストラクターを使用します。

PriorityQueue pq = new PriorityQueue(initialcapacity, Comparator);

java.util.Comparatorについて読む

于 2012-11-12T12:09:02.187 に答える
0

Collections.sortCollectionsリストは引数としてのみ取ることができますが、クラスにあるので実際には意味がありません。残念ながら、PriorityQueueCollection実装されていませんList

于 2012-11-12T12:12:51.113 に答える