优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。
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中实现的比较方法优先加入比较值最大的对象