• 《转》JAVA中PriorityQueue优先级队列使用方法


    该文章转自:http://blog.csdn.net/hiphopmattshi/article/details/7334487

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

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

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

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

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

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

    输出结果:

    t3 - 3

     

    结论:

      PriorityQueue根据Comparator中实现的比较方法优先加入比较值最大的对象

  • 相关阅读:
    你应该掌握的——树和二叉树
    nyist oj 63(二叉树)
    非递归遍历二叉树的四种策略先序、中序、后序和层序
    学习的四种境界
    nyist oj 467 (中缀式变后缀式)
    二叉平衡树
    nyist OJ 35 (表达式求值)
    线索二叉树
    二叉树的三种遍历方法(递归和非递归)
    算法学习之路
  • 原文地址:https://www.cnblogs.com/wubingshenyin/p/4496064.html
Copyright © 2020-2023  润新知