from:http://blog.csdn.net/hiphopmattshi/article/details/7334487

我有简单修改一下,主要是原来的代码不符合Java规范。另外,我添加了一行注释:

// 注意:PriorityQueue并非线程安全,线程安全的优先级队列用这个:PriorityBlockingQueue

--------------------------------------------------------------------------------------------------------------------------------- 

优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。

  PriorityQueue是从JDK1.5开始提供的新的数据结构接口。

  如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。

       由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个demo~

      如果想实现按照自己的意愿进行优先级排列的队列的话,需要实现Comparator接口。下面的方法,实现了根据某个变量,来进行优先级队列的建立。

 
  1. package com.taobao.test; 
  2.  
  3. import java.util.Comparator;   
  4. import java.util.PriorityQueue;   
  5. import java.util.Queue;   
  6.    
  7. // 注意:PriorityQueue并非线程安全,线程安全的优先级队列用这个:PriorityBlockingQueue 
  8.  
  9. public class PriorityQueueTest {   
  10.     private String name;   
  11.     private int population;   
  12.     public PriorityQueueTest(String name, int population)   
  13.     {   
  14.         this.name = name;   
  15.         this.population = population;   
  16.     }   
  17.     public String getName()   
  18.     {   
  19.          return this.name;   
  20.     }   
  21.    
  22.     public int getPopulation()   
  23.     {   
  24.          return this.population;   
  25.     }   
  26.     public String toString()   
  27.     {   
  28.          return getName() + " - " + getPopulation();   
  29.     }   
  30.     public static void main(String args[])   
  31.     {   
  32.         Comparator<PriorityQueueTest> OrderIsdn =  new Comparator<PriorityQueueTest>(){   
  33.             public int compare(PriorityQueueTest o1, PriorityQueueTest o2) {   
  34.                 // TODO Auto-generated method stub   
  35.                 int numbera = o1.getPopulation();   
  36.                 int numberb = o2.getPopulation();   
  37.                 if(numberb > numbera)   
  38.                 {   
  39.                     return 1;   
  40.                 }   
  41.                 else if(numberb<numbera)   
  42.                 {   
  43.                     return -1;   
  44.                 }   
  45.                 else   
  46.                 {   
  47.                     return 0;   
  48.                 }   
  49.                
  50.             }   
  51.    
  52.                
  53.                
  54.         };   
  55.          
  56.         Queue<PriorityQueueTest> priorityQueue =  new PriorityQueue<PriorityQueueTest>(11,OrderIsdn);   
  57.            
  58.                    
  59.                
  60.         PriorityQueueTest t1 = new PriorityQueueTest("t1",1);   
  61.         PriorityQueueTest t3 = new PriorityQueueTest("t3",3);   
  62.         PriorityQueueTest t2 = new PriorityQueueTest("t2",2);   
  63.         PriorityQueueTest t4 = new PriorityQueueTest("t4",0);   
  64.         priorityQueue.add(t4); 
  65.         priorityQueue.add(t1);   
  66.         priorityQueue.add(t3);   
  67.         priorityQueue.add(t2);   
  68.            
  69.         System.out.println(priorityQueue.poll().toString());   
  70.         System.out.println(priorityQueue.poll().toString());  
  71.         System.out.println(priorityQueue.poll().toString());  
  72.         System.out.println(priorityQueue.poll().toString());  
  73.     }   
  74. }