Queue集合中的PriorityQueue實現類
阿新 • • 發佈:2018-12-29
Queue用於建立模擬佇列這種資料結構,Queue介面中定義瞭如下幾種方法:
方法
- void add(Object e):將指定元素加入此佇列的尾部
- boolean offer(Object e):將指定元素加入此佇列的尾部。當使用有容量限制的佇列時,此方法更好用些。
- Object element():獲取佇列頭部的元素,但是不刪除該元素
- Object peek():獲取佇列頭部的元素,但是不刪除該元素。如果此佇列為空,則返回null
- Object poll():獲取佇列頭部的元素,並刪除該元素。如果此佇列為空,則返回null
Object remove():獲取佇列頭部的元素,並刪除該元素。
PriorityQueue實現類:
PriorityQueue是一個比較標準的佇列實現類,因為PriorityQueue儲存佇列元素的順序不是按照加入佇列的順序,而是按照元素的大小進行重新排序。
PriorityQueue不允許插入null元素,他還需要對佇列元素進行排序,PriorityQueue有兩種排序方式:自然排序:
採用自然順序的PriorityQueue集合中的元素必須實現了Comparable介面,而且應該是統一個類的多個例項,否則可能導致ClassCastException異常
PriorityQueue pq = new PriorityQueue();
pq.offer(6);
pq.offer(-9);
pq.offer(20);
pq.offer(18);
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
System.out.println(pq.poll());
System.out .println(pq);
System.out.println(pq.poll());
System.out.println(pq);
定製排序
建立PriorityQueue佇列時,傳入一個Comparator物件,該物件負責對元素進行排序操作,此時不要求佇列元素實現Comparable介面
PriorityQueue pq = new PriorityQueue((o1,o2) ->
{
int m1 = (int)o1;
int m2 = (int)o2;
return m1>m2?-1:m1<m2?1:0;
});
pq.offer(6);
pq.offer(-9);
pq.offer(20);
pq.offer(18);
System.out.println(pq);