天天看點

java優先隊列(PriorityQueue)的使用PriorityQueue

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;
}