优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。
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. 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. new PriorityQueue<test>(11,OrderIsdn);
52.
53.
54.
55. new test("t1",1);
56. new test("t3",3);
57. new test("t2",2);
58. 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. }