我有一個叫Incoming
的PriorityQueue
,它包含Vehicle
類型的對象。Java優先級隊列排序
您可以撥打所有Vehicles
上的方法getFuelLevel()
。
我想要做的是對Incoming
進行排序,以便Vehicles
的fuel
的優先級更高,並放置在隊列的前端。
我假設我必須在這裏使用Comparator
,但不知道該怎麼做。
我有一個叫Incoming
的PriorityQueue
,它包含Vehicle
類型的對象。Java優先級隊列排序
您可以撥打所有Vehicles
上的方法getFuelLevel()
。
我想要做的是對Incoming
進行排序,以便Vehicles
的fuel
的優先級更高,並放置在隊列的前端。
我假設我必須在這裏使用Comparator
,但不知道該怎麼做。
在我自己的課程中使用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
的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();
}
});
你可以看看我在這個問題中使用PriorityQueue嗎? http://stackoverflow.com/questions/28800287/how-to-restore-the-priorityqueue-to-its-initial-state-before-the-method-call?noredirect=1#comment45875800_28800287 – committedandroider
http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue – user3159253
這是'java.util中。 PriorityQueue'或者你正在編寫你自己的實現?如果您正在編寫自己的文章,請嘗試使用堆。 – McLovin
有一個很好的例子:http://www.journaldev.com/1642/java-priority-queue-priorityqueue-example演示如何在排序中使用比較器。 – Alan