2012-11-12 41 views
0
public class Flight implements Comparable { 

....的PriorityQueue排序

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的:未解決問題彙編: 在類型類別的方法的排序(列表)不適用於

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

我使用的確切相同的compareTo爲參數(的PriorityQueue)一個LinkedList和它的作品,並且一切都是一樣的我沒有遺漏某些東西(我認爲)。我不明白它是如何工作的LinkedList,但不是PriorityQueue。

+1

請檢查此問題http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue –

+0

PriorityQueue的下一個值始終最低。如果使用正確的比較器構造PriorityQueue,則不需要額外的排序。 –

回答

3

Collections.sort(List<E>)只接受列表實施類。 java.util.LinkedList實現列表 inteface,其中Priorityqueue不實現列表。 實施例:

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

檢查Collections.sort(List)簽名進行排序使用排序方法的優先級隊列

的方法之一是的PriorityQueue轉換爲陣列,並使用Arrays.sort()。

Arrays.sort(pq.toArray()); 

或者使用PQ的構造函數,它將Comparator作爲第二個參數。

PriorityQueue pq = new PriorityQueue(initialcapacity, Comparator);

和閱讀有關java.util.Comparator

+0

我明白了,所以我無法對隊列進行排序? – user1817988

+0

@ user1817988檢查我的編輯:) – PermGenError

+0

我看,好的謝謝你的幫助,我去了另外1個問題。 – user1817988

0

Collections.sort只能取一個列表作爲參數,它並沒有真正意義,因爲它是在Collections類。可悲的是,雖然PriorityQueueCollection,但它不實現List

+0

所以隊列是不可退化的? – user1817988

相關問題