PriorityQueue(优先队列)使用完整示例

简介: package cc.cv;import java.util.Comparator;import java.util.PriorityQueue;/** * PriorityQueue(优先队列)使用完整示例 * 采用PriorityQueue时里面的每个元素按照一定标准的优先级进行存储.
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 + "]";
		}
		
	}

}

相关文章
|
7月前
|
算法 数据处理 调度
【C++ 优先队列】了解 C++优先队列中操作符重载的实现
【C++ 优先队列】了解 C++优先队列中操作符重载的实现
103 0
|
7月前
堆(优先级队列 PriorityQueue)
堆(优先级队列 PriorityQueue)
44 0
|
Java 调度
【PriorityQueue优先级队列及其应用】
【PriorityQueue优先级队列及其应用】
|
4月前
|
存储 设计模式 算法
【C++】deque以及优先级队列
【C++】deque以及优先级队列
|
7月前
|
设计模式 算法 调度
【C++】开始使用优先队列
优先队列的使用非常灵活,它适合于任何需要动态调整元素优先级和快速访问最高(或最低)优先级元素的场景。在使用时,需要注意其插入和删除操作的时间复杂度,以及如何根据实际需求选择合适的仿函数。
63 4
|
存储 Java
PriorityQueue优先级队列
PriorityQueue优先级队列
|
人工智能 算法 搜索推荐
我学会了,封装自己的优先队列PriorityQueue
优先队列本身就是一种队列。 普通队列:先进先出、后进后出,如排队买票吃饭一样。 优先队列:出队顺序和入队顺序无关,和优先级相关。如去医院看病,床位非常的紧张,需要排队才能去做手术的话,此时做手术的这个队伍的顺序就是一个优先队列。因为医生是根据每一个患者的病症的不同以及需要这个手术的紧急程度的不同来去安排谁先做手术谁后做手术,也可以认为每一个患者是有一个优先级的。优先级高者先得,这样的一个队列就叫做优先队列,它和普通队列最主要的区别是在于出队这个操作上,入队很简单,但是优先级高的先出队。
237 0
我学会了,封装自己的优先队列PriorityQueue
|
存储 C++ 容器
深入了解C++优先队列
在计算机科学中,优先队列是一种抽象数据类型,它与队列相似,但是每个元素都有一个相关的优先级。C++中的优先队列是一个容器适配器(container adapter),它提供了一种在元素之间维护优先级的方法。
192 0
|
算法 C++ 容器
STL之队列、优先队列、栈
STL之队列、优先队列、栈
|
安全 Java
Java集合框架(PriorityQueue优先级队列讲解)
Java集合框架(PriorityQueue优先级队列讲解)
144 0