2014-04-01 23 views
4

我初始化一個優先級隊列,如:Java的PriorityQueue的比較 - 如何/你什麼時候進行排序?

strategy = new FuelPriority(); 
incoming = new PriorityQueue<Vehicle>(1, strategy); 

我比較類的代碼是:

public class FuelPriority implements Comparator<Object> { 

public int compare(Object o1, Object o2) { 

    Vehicle a1 = (Vehicle) o1; 
    Vehicle a2 = (Vheicle) o2; 

    return Integer.compare(a1.getFuelLevel(), a2.getFuelLevel()); 
    } 
} 

運行仿真後,的元素是不能在所有訂購 - 他們是隨機的;我在FuelPriority類的比較方法設置斷點,但它並沒有被調用。 我在這裏錯過了什麼嗎?

回答

3

除了您的代碼,它爲我工作。

import java.util.Comparator; 
import java.util.PriorityQueue; 

public class StackOverflow 
{ 
    public static void main(String[] args) 
    { 

     FuelPriority strategy = new FuelPriority(); 
     PriorityQueue<Vehicle> incoming = new PriorityQueue<Vehicle>(4, strategy); 
     incoming.add(new Vehicle("car1", 10)); 
     incoming.add(new Vehicle("car2", 20)); 
     incoming.add(new Vehicle("car3", 15)); 
     incoming.add(new Vehicle("car4", 1)); 

     // to retrieve the elements in order 
     while (!incoming.isEmpty()) { 
      System.out.println(incoming.poll()); 
     } 

    } 

} 

class FuelPriority 
    implements Comparator<Object> 
{ 

    public int compare(Object o1, Object o2) 
    { 

     Vehicle a1 = (Vehicle)o1; 
     Vehicle a2 = (Vehicle)o2; 

     return Integer.compare(a1.getFuelLevel(), a2.getFuelLevel()); 
    } 
} 

class Vehicle 
{ 

    private String name; 
    private int fuelLevel; 

    public Vehicle(String name, int fuelLevel) 
    { 
     this.name = name; 
     this.fuelLevel = fuelLevel; 
    } 
    public int getFuelLevel() 
    { 
     return fuelLevel; 
    } 

    @Override 
    public String toString() 
    { 
     return name + "=" + fuelLevel; 
    } 
} 
+0

好像被訂購,但不能完全/正確,這裏是一個運行的輸出:13,16,27,21,19,39,37,50,30,34,64,46,49,72,59,58,55,61,47,73 I」已經試過在幾個不同的種子,最低燃油水平總是在隊列的前面,但我不知道爲什麼其餘對象不正確排序。 –

+1

如果你想在排序順序檢索值,使用輪詢或偷看。具體而言,而改變的System.out.println(進入){ 的System.out.println(incoming.poll())(incoming.isEmpty()!); } –

+0

@AlexandreSantos你可以看看我在這個問題上使用的PriorityQueue的? http://stackoverflow.com/questions/28800287/how-to-restore-the-priorityqueue-to-its-initial-state-before-the-method-call – committedandroider

2

API說的PriorityQueue迭代不能保證遍歷優先級隊列中的元素的任何特定順序。它只是保證了調查,從錯字刪除,peek和element訪問的元素在隊列的頭部(最小元素)

+0

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

相關問題