PriorityQueue
優點:
在定義了排序的規則之後可以再加入的同時進行排序,可以縮短排序所需的時間,同時較set來說沒有單一進制素不可重複的的限制。
常用方法:
add:加入元素
clear:删除所有元素
isEmpty:判斷隊列是否為空
poll:檢索并删除此隊列的頭,如果此隊列為空,則傳回
null
peek:檢索但不删除此隊列的頭,如果此隊列為空,則傳回null
remove:檢索并删除此隊列的頭,如果此隊列為空會出現異常
comparator:傳回用于排序此隊列中元素的比較器,如果此隊列是根據其元素的自然順序排序的,則傳回null
contains:傳回隊列中是否包含所給元素
size:傳回所含的元素數量
建立方法:
/**
* 使用預設比較器
*/
PriorityQueue<Object> que = new PriorityQueue<>();
/**
* 使用自定義比較器(cmp)
*/
PriorityQueue<Object> que = new PriorityQueue<>(cmp);
比較器:
Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
//比較方法
return e2 - e1;
}
};
代碼示例:
import java.util.Comparator;
import java.util.PriorityQueue;
public class TestPriorityQueue{
/**
* 寫成靜态友善試驗時操作
*/
static Comparator<Test> cmp = new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
// TODO Auto-generated method stub
return o1.index-o2.index;
}
};
static PriorityQueue<Test> que = new PriorityQueue<>(cmp);
public static void main(String[] args) {
// TODO Auto-generated method stub
CreatElement();
System.out.println("輸出元素數量:"+que.size());
System.out.println("是否包含:"+que.contains(que.peek()));
System.out.println("是否包含:"+que.contains(new Test(11)));
System.out.println("檢索不彈出:"+que.peek().index);
/**
* 輸出元素數量:10
* 是否包含:true
* 是否包含:false
* 檢索不彈出:0
*/
while(!que.isEmpty())
{
System.out.println("檢索并彈出:"+que.poll().index);
}
System.out.println("檢索并彈出,此時為空隊列:"+que.poll());
/**
* 檢索并彈出:0
* 檢索并彈出:1
* 檢索并彈出:2
* 檢索并彈出:3
* 檢索并彈出:4
* 檢索并彈出:5
* 檢索并彈出:6
* 檢索并彈出:7
* 檢索并彈出:8
* 檢索并彈出:9
* 檢索并彈出,此時為空隊列:null
*/
CreatElement();
while(!que.isEmpty())
{
System.out.println("移除并輸出:"+que.remove().index);
}
/**
* 移除并輸出:0
* 移除并輸出:1
* 移除并輸出:2
* 移除并輸出:3
* 移除并輸出:4
* 移除并輸出:5
* 移除并輸出:6
* 移除并輸出:7
* 移除并輸出:8
* 移除并輸出:9
*/
}
/**
* 添加元素的方法
*/
public static void CreatElement()
{
for(int a=0;a<10;a++)
{
que.add(new Test(a));
}
}
}
class Test
{
public Test(int index){
this.index = index;
}
int index;
}