2014-03-30 57 views
1

我有一個叫IncomingPriorityQueue,它包含Vehicle類型的對象。Java優先級隊列排序

您可以撥打所有Vehicles上的方法getFuelLevel()

我想要做的是對Incoming進行排序,以便Vehiclesfuel的優先級更高,並放置在隊列的前端。

我假設我必須在這裏使用Comparator,但不知道該怎麼做。

+0

http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue – user3159253

+0

這是'java.util中。 PriorityQueue'或者你正在編寫你自己的實現?如果您正在編寫自己的文章,請嘗試使用堆。 – McLovin

+0

有一個很好的例子:http://www.journaldev.com/1642/java-priority-queue-priorityqueue-example演示如何在排序中使用比較器。 – Alan

回答

1

在我自己的課程中使用PriorityQueue時,我總是這樣做的一件事是讓該課程實現Comparable<Class>。有了這個,不需要實現一個比較器,所有你需要實現的是類中的int compareTo(Class o)方法,該方法返回「負整數,零或正整數,因爲該對象小於,等於或大於指定的對象「。

在你的情況,這將返回1,如果Vehicles有更少的燃料比Vehicles inputed,0如果兩者具有相同的,和-1,如果Vehicles有更多的燃料比一個inputed。

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

1

PriorityQueue類有一個構造函數一個Comparator作爲參數。您可以通過提供構建PriorityQueue您的具體Comparator作爲

PriorityQueue<Vehicle> queue = new PriorityQueue<Vehicle>(initialCapacity, new Comparator<Vehicle> { 
    int compare(Vehicle a, Vehicle b) { 
     return a.getFuelLevel() - b.getFuelLevel(); 
    } 
}); 
+0

你可以看看我在這個問題中使用PriorityQueue嗎? http://stackoverflow.com/questions/28800287/how-to-restore-the-priorityqueue-to-its-initial-state-before-the-method-call?noredirect=1#comment45875800_28800287 – committedandroider