优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。
PriorityQueue是从JDK1.5开始提供的新的数据结构接口。
如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。
如果想实现按照自己的意愿进行优先级排列的队列的话,需要实现Comparator接口。下面的方法,实现了根据某个变量,来进行优先级队列的建 立。
下面是一个事例,编写了Comparator比较规则,根据population的值进行从小到大排序存储;
package test1;
import java.util.Comparator;
import java.util.PriorityQueue;
public class TestPriorityQueue {
private String name;
private int population;
public TestPriorityQueue(String name, int population) {
super();
this.name = name;
this.population = population;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
@Override
public String toString() {
return getName()+"-"+getPopulation() ;
}
public static void main(String[] args) {
Comparator<TestPriorityQueue> com = new Comparator<TestPriorityQueue>() {
@Override
public int compare(TestPriorityQueue t1, TestPriorityQueue t2) {
int number1 = t1.getPopulation();
int number2 = t2.getPopulation();
if(number1>number2)
return 1;
else if(number1 < number2)
return -1;
else
return 0;
}
};
PriorityQueue<TestPriorityQueue> testPriorityQueue = new PriorityQueue<>(com);
TestPriorityQueue t1 = new TestPriorityQueue("t1",1);
TestPriorityQueue t2 = new TestPriorityQueue("t2",2);
TestPriorityQueue t3 = new TestPriorityQueue("t3",3);
TestPriorityQueue t4 = new TestPriorityQueue("t4",0);
testPriorityQueue.add(t1);
testPriorityQueue.add(t2);
testPriorityQueue.add(t3);
testPriorityQueue.add(t4);
while(!testPriorityQueue.isEmpty() ){
System.out.println(testPriorityQueue.poll().toString());
}
}
}
输出: