1. 程式人生 > >Queue集合中的PriorityQueue實現類

Queue集合中的PriorityQueue實現類

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