1. 程式人生 > >java中PriorityQueue優先順序佇列使用方法

java中PriorityQueue優先順序佇列使用方法

    優先順序佇列是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。

  PriorityQueue是從JDK1.5開始提供的新的資料結構介面。

  如果不提供Comparator的話,優先佇列中元素預設按自然順序排列,也就是數字預設是小的在佇列頭,字串則按字典序排列。

       由於網上的資料大多將優先順序佇列各個方法屬性,很少有例項講解的,為方便大家以後使用,我就寫了個demo~

      如果想實現按照自己的意願進行優先順序排列的佇列的話,需要實現Comparator介面。下面的方法,實現了根據某個變數,來進行優先順序佇列的建立。

  1. import
     java.util.Comparator;  
  2. import java.util.PriorityQueue;  
  3. import java.util.Queue;  
  4. publicclass test {  
  5.     private String name;  
  6.     privateint population;  
  7.     public test(String name, int population)  
  8.     {  
  9.         this.name = name;  
  10.         this.population = population;  
  11.     }  
  12.     public
     String getName()  
  13.     {  
  14.          returnthis.name;  
  15.     }  
  16.     publicint getPopulation()  
  17.     {  
  18.          returnthis.population;  
  19.     }  
  20.     public String toString()  
  21.     {  
  22.          return getName() + " - " + getPopulation();  
  23.     }  
  24.     publicstaticvoid main(String args[])  
  25.     {  
  26.         Comparator<test> OrderIsdn =  new
     Comparator<test>(){  
  27.             publicint compare(test o1, test o2) {  
  28.                 // TODO Auto-generated method stub
  29.                 int numbera = o1.getPopulation();  
  30.                 int numberb = o2.getPopulation();  
  31.                 if(numberb > numbera)  
  32.                 {  
  33.                     return1;  
  34.                 }  
  35.                 elseif(numberb<numbera)  
  36.                 {  
  37.                     return -1;  
  38.                 }  
  39.                 else
  40.                 {  
  41.                     return0;  
  42.                 }  
  43.             }  
  44.         };  
  45.         Queue<test> priorityQueue =  new PriorityQueue<test>(11,OrderIsdn);  
  46.         test t1 = new test("t1",1);  
  47.         test t3 = new test("t3",3);  
  48.         test t2 = new test("t2",2);  
  49.         test t4 = new test("t4",0);  
  50.         priorityQueue.add(t1);  
  51.         priorityQueue.add(t3);  
  52.         priorityQueue.add(t2);  
  53.         priorityQueue.add(t4);  
  54.         System.out.println(priorityQueue.poll().toString());  
  55.     }  
  56. }  

相關推薦

javaPriorityQueue優先順序佇列使用方法

    優先順序佇列是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。   PriorityQueue是從JDK1.5開始提供的新的資料結構介面。   如果不提供Comparator的話,優先佇列中元素預設按自然順序排列,也就是數字預設是小的在

java(優先佇列PriorityQueue的使用

import java.util.*; public class test1 { public static void PrintPr(Queue<?> queue){ while(queue.peek()!=null){ System.ou

javaString類常用方法、屬性等

col clas equal ack length ++ ava eal rgs package Head18; public class java09 { public static void main(String[] args) { St

Java的泛型方法

pan sta 有一個 println 泛型方法 判斷 調用方法 user instant 這是一個轉載的博客 這是一個轉載的博客 這是一個轉載的博客   泛型是什麽意思在這就不多說了,而Java中泛型類的定義也比較簡單,例如:public class Test<T&

JAVA構造器和方法的區別點

string dem pub 關鍵字 意義 ext 沒有 ron 開始 要學習Java,你必須理解構造器。因為構造器可以提供許多特殊的方法,這個對於初學者經常混淆。但是,構造器和方法又有很多重要的區別。 下面將簡單介紹一下 ,最後用一個表作了些簡單的總結。 功能和作用的不同

javaString的常用方法

大寫 緩沖 let 常用方法 類型 http 全部 new 出現 轉自http://www.cnblogs.com/crazyac/articles/2012791.html java中String的常用方法1、length() 字符串的長度  例:char chars[]

Java調用JavaScript方法

兩個 tint work object c ash 沒有 .net nashorn alc 我們都知道腳本語言非常靈活,在處理某些問題的時候 Java 實現用十幾行來寫,用 js 可能不到十行就寫完,並且非常簡潔,那麽有沒有一種優雅的方式將 Java 與腳本語言結合呢,在

Javawait和sleep方法的區別

lee join 告訴 inter art 過程 lam 兩個 一次 1、兩者的區別 這兩個方法來自不同的類分別是Thread和Object 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法(鎖代碼塊和方法鎖)。 w

java sendredirect()和forward()方法的區別

rect 次數 報錯 nec 重定向 web服務 單獨 exception aca 一.文章1 HttpServletResponse.sendRedirect與RequestDispatcher.forward方法都可以實現獲取相應URL資源。 sendRedirect

Java類的構造方法

擴展 這樣的 實例化 構造函數 中文 編譯器 new對象 const 一個 constructor;構造函數。 在創建對象的時候,對象成員可以由構造函數方法進行初始化。 new對象時,都是用構造方法進行實例化的; 例如;Test test = new Test("a")

javaJMS訊息佇列初始

1.什麼是訊息佇列:     JMS是一個訊息服務的標準或者說是規範,允許應用程式元件基於JavaEE平臺建立、傳送、接收和讀取訊息。它使分散式通訊耦合度更低,訊息服務更加可靠以及非同步性。 2.JMS基本概念:     JMS是ja

NSQ原始碼分析(四)——inFlightPqueue和PriorityQueue優先順序佇列

   在Channel結構體中用到了兩種優先順序佇列pqueue.PriorityQueue和inFlightPqueue。 deferredMessages map[MessageID]*pqueue.Item deferredPQ pqueue.Priorit

javaThread類run()方法和start()方法的區別

run方法:不啟動新執行緒 public void run() { if (target != null) { target.run(); } } start()方法:啟動一個執行緒 public synchronized void start()

Javanext與nextLine方法的區別

1. Java中的Scanner類中的方法next()與nextLine()都是吸取輸入控制檯輸入的字元 ①next()方法不會吸取字元前和後的空格/Tab,只吸取字元,開始吸取字元(字元前後不算) 直到遇到空格/Tab/回車擷取吸取 ②nextLine()吸取字元前後的空格/Tab鍵,回車鍵截

java常見的math方法

java中常見的math方法 java.lang.Math : 隨機: static double random()      返回一個介於[0,1)之間的隨機數 拓展: Math.ceil(Math.random()*10);返

Java一些類的方法

Object類 (1)public int hashCode() a:返回該物件的雜湊碼值。預設情況下,該方法會根據物件的地址來計算。 b:不同物件的,hashCode()一般來說不會相同。 但是,同一個物件的hashCode()值肯定相同。 c:不是物件的實際地址值,可以理解為邏

關於Java的Arrays.copyOfRange()方法

               關於Java中的Arrays.copyOfRange()方法   轉載:https://blog.csdn.net/babylorin/article/details/67

java讀取檔案的方法

不同的方法需要匯入不同的包,使用Ctrl+Shift+O導包即可。 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc

深入理解Java的同步靜態方法和synchronized(class)程式碼塊的類鎖 深入理解Java併發synchronized同步化的程式碼塊不是this物件時的操作

一.回顧學習內容  在前面幾篇部落格中我我們已經理解了synchronized物件鎖、物件鎖的重入、synchronized方法塊、synchronized非本物件的程式碼塊,  連結:https://www.cnblogs.com/SAM-CJM/category/1314992.h

PriorityQueue(優先順序佇列)

  先進先出描述了最典型的佇列規則。佇列規則是指在給定一組佇列中的元素的情況下,確定下一個彈出佇列元素的規則。先進先出宣告的是下一個元素應該是等待時間最長的元素。   當你在PriorityQueue上呼叫offer()方法來插入一個物件時,這個物件會在佇列中被排序。預設的排