Java util包中的PriorityQueue類用來表示優先隊列。優先隊列是一個以集合為基礎的抽象數據類型,隊列中的每個元素都有一個優先級值。優先級值用來表示該元素的出列的優先級。
Java中的優先隊列基於堆(heap)。堆是一個完全二叉樹,所以PriorityQueue不是線性結構,而是樹形結構。PriorityQueue中元素優先級的高低可以由一個Comparator類的實例來指定,如果未指定則按照自然順序排序。可以按照下面的方法建立一個指定comparator的PriorityQueue:
PriorityQueue<MyObject> PQ=
new PriorityQueue<MyObject>(1,
new MyComparator
implements Comparator<MyObject>(){
public int compare(MyObject obj1,MyObject obj2){
if(obj1.getSize()<obj2.getSize()){
return -1;
}
if(obj1.getSize()>obj2.getSize()){
return 1;
}
return 0;
}})
public int compare(MyObject obj1,MyObject obj2){
if(obj1.getSize()<obj2.getSize()){
return -1;
}
if(obj1.getSize()>obj2.getSize()){
return 1;
}
return 0;
}})
這里使用PriorityQueue來存儲我自定義的對象MyObject。此對象有個方法getSize()來得到它存儲的一個有關大小的整型值,該值越大,則該對象的優先級越大。
要想按照優先級高低輸出PriorityQueue中的所有元素,則可以采用PriorityQueue類中的poll()方法,該方法得到堆頂元素,並且刪除。 此外,Java api還提供了多種操作,可以查看api文檔,http://docs.oracle.com/javase/7/docs/api/。