package cc.cv;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* PriorityQueue(优先队列)使用完整示例
* 采用PriorityQueue时里面的每个元素按照一定标准的优先级进行存储.
* 而这个优先级的标准我们可以用Comparator来自己定义.
*
* 参考资料:
* 1 http://blog.csdn.net/chengyingzhilian/article/details/8078032
* 2 http://java-er.com/blog/java-priority-queue/
* 3 http://blog.csdn.net/hantiannan/article/details/7623108
* Thank you very much
*
*/
public class PriorityQueueTest {
private int initialCapacity=10;
public static void main(String[] args) {
PriorityQueueTest priorityQueueTest=new PriorityQueueTest();
priorityQueueTest.test();
}
/**
* 将一群斑马放入优先队列PriorityQueue中.
* 既然是优先队列PriorityQueue,那么就有一个优先的标准.
* 在此就按照每个斑马的身高优先将一群斑马存在队列中
*/
private void test(){
PriorityQueue<Zebra> priorityQueue=new PriorityQueue<Zebra>(initialCapacity, new ZebraComparator());
Zebra zebra1=new Zebra("a", 130);
priorityQueue.add(zebra1);
Zebra zebra2=new Zebra("b", 130);
priorityQueue.add(zebra2);
Zebra zebra3=new Zebra("c", 130);
priorityQueue.add(zebra3);
Zebra zebra4=new Zebra("d", 130);
priorityQueue.add(zebra4);
Zebra zebra5=new Zebra("a", 110);
priorityQueue.add(zebra5);
Zebra zebra6=new Zebra("c", 120);
priorityQueue.add(zebra6);
System.out.println("priorityQueue.size()="+priorityQueue.size());
//每个元素依次出队,便于测试
while (!priorityQueue.isEmpty()){
System.out.println(priorityQueue.poll());
}
System.out.println("priorityQueue.size()="+priorityQueue.size());
}
//按照斑马的身高进行排序,身高相同时再比较名字
class ZebraComparator implements Comparator {
@Override
public int compare(Object arg0, Object arg1) {
Zebra zebra0 = (Zebra) arg0;
Zebra zebra1 = (Zebra) arg1;
if (zebra0.getHeight() > zebra1.getHeight()) {
return 1;
}
// 身高相同时再比较名字
if (zebra0.getHeight() == zebra1.getHeight()) {
return zebra0.getName().compareTo(zebra1.getName());
}
if (zebra0.getHeight() < zebra1.getHeight()) {
return -1;
}
return 0;
}
}
/**
* 动物园里的大熊猫和斑马还是很可爱的。
* 看大熊猫的话,成都熊猫基地很爽.
* 看斑马的话,北京动物园不错,里面还有需要仰着脖子看的长颈鹿......
* 在这里就用斑马举例吧,它有名字和身高这两个属性
*/
private class Zebra{
private String name;
private int height;
public Zebra(String name, int height) {
super();
this.name = name;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Zebra [name=" + name + ", height=" + height + "]";
}
}
}