程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> PriorityQueue優先隊列用法入門,priorityqueue隊列

PriorityQueue優先隊列用法入門,priorityqueue隊列

編輯:JAVA綜合教程

PriorityQueue優先隊列用法入門,priorityqueue隊列


PriorityQueue是隊列的一種,它叫做優先隊列,該類實現了Queue接口。

之所以叫做優先隊列,是因為PriorityQueue實現了Comparator這個比較接口,也就是PriorityQueue內部具有了排序方法,在offer(插入)或poll(彈出)元素的過程中,優先隊列中的數據會動態排序(而非顯式的調用排序方法,可能初學者會這麼認為)。

如果不提供Comparator的話,PriorityQueue會按默認的執行,即按照自然數排列,數字最小的優先權最高,對於字符串來說,則是按照字典序。

優先隊列不同於常規的隊列,對於常規隊列來說,每次從隊尾入隊,隊首出隊;而對於優先權隊列來說,每次出隊則是優先權最高的元素。

下面呢,讓我們以一個具體案例來更深入的理解PriorityQueue的用法。

 1 public static void main(String[] args) {
 2         // TODO Auto-generated method stub
 3         Queue<Integer> queue=new PriorityQueue<Integer>(10,new Comparator<Integer>() {
 4 
 5             @Override
 6             public int compare(Integer i, Integer j) {
 7                 // TODO Auto-generated method stub
 8                 //注意理解,這裡是奇數在左側,數字大的在左側
 9                 int result=i%2-j%2;
10                 if(result==0)
11                     result=i-j;
12                 return result;
13             }
14         });
15         for(int i=0;i<10;i++)
16         {
17             queue.offer(i);
18         }
19         for(int i=0;i<10;i++)
20         {
21             System.out.println(queue.poll());
22         }
23     }        

 

上述代碼實現了一個比較器,該比較器設置為奇數在偶數的左側,大數在小數的左側。故輸出結果為:0 2 4 6 8 1 3 5 7 9

如果,把比較器的參數i和j互換一下,那麼,親們,能猜測到結果嗎?

參數互換以後,奇數在偶數的右側,大數在小數的右側(注意,個人感覺右側的優先權最高,即右側即為隊首,勿噴~);

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Queue<Integer> queue=new PriorityQueue<Integer>(10,new Comparator<Integer>() {

            @Override
            public int compare(Integer j, Integer i) {
                // TODO Auto-generated method stub
                int result=i%2-j%2;
                if(result==0)
                    result=i-j;
                return result;
            }
        });
        for(int i=0;i<10;i++)
        {
            queue.offer(i);
        }
        for(int i=0;i<10;i++)
        {
            System.out.println(queue.poll());
        }
    }

打印結果為 9 7 5 3 1 8 6 4 2 0

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved