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 + "]";
		}

	}

}
时间: 2024-10-29 19:15:30

PriorityQueue(优先队列)使用完整示例的相关文章

SeaJS入门教程系列之完整示例(三)

 这篇文章主要介绍了SeaJS入门教程系列之完整示例,演示了一个完整的SeaJS开发例子,需要的朋友可以参考下 一个完整的例子 上文说了那么多,知识点比较分散,所以最后我打算用一个完整的SeaJS例子把这些知识点串起来,方便朋友们归纳回顾.这个例子包含如下文件:   1.index.html--主页面. 2.sea.js--SeaJS脚本. 3.init.js--init模块,入口模块,依赖data.jquery.style三个模块.由主页面载入. 4.data.js--data模块,纯json

Keras R语言接口正式发布,同时公开20个完整示例

关于keras的介绍 Keras是一个高层神经网络API,为支持快速实验而生,目前主要功能如下: 支持相同的代码无缝跑在CPU或GPU上 对用户友好,易于快速prototype深度学习模型 支持计算机视觉中的卷积网络.序列处理中的循环网络,也支持两种网络的任意组合 支持任意网络架构:多段输入或多段输出模型.层共享.模型共享等.这意味着Keras 本质上适合用于构建任意深度学习模型(从记忆网络到神经图灵机) 兼容多种运行后端,例如TensorFlow.CNTK和 Theano 如果你已经很熟悉Ke

cxf-求CXF对象传递的完整示例

问题描述 求CXF对象传递的完整示例 求CXF对象传递的完整示例 求CXF对象传递的完整示例 求CXF对象传递的完整示例

RatingBar使用完整示例

MainActivity如下: package cc.testratingbar; import android.os.Bundle; import android.widget.RatingBar; import android.widget.RatingBar.OnRatingBarChangeListener; import android.app.Activity; /** * Demo描述: * RatingBar使用完整示例 * 如果要自定义RatingBar更改它的外观,只需要在布

jQuery包裹节点用法完整示例_jquery

本文实例讲述了jQuery包裹节点用法.分享给大家供大家参考,具体如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script src="jquery-1.7.2.min.js" type="text/javas

C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient main.c -o main.out -I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件) -L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找) -l:链接libmysqlclient.so动态库 -o:生成的可执行文件名 三.完整示例 //

Android点亮屏幕和解锁完整示例

MainActivity如下: package cc.test.testwakelock; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.Intent; /** * Demo描述: * 点亮屏幕和解开键盘锁完整示例 * * 注意权限: * <uses-permission android:name="android.p

Timer和TimerTask使用完整示例

MainActivity如下: package cc.test; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; /** * Demo描述: * Timer和TimerTask使用完整示例 */ public class MainActivity extends Activity { private Timer mTimer; pr

C#对Access进行增删改查的完整示例_C#教程

这篇文章整理了C#对Access数据库的查询.添加记录.删除记录和更新数据等一系列的操作示例,有需要的可以参考学习. 首先是AccessHelper.cs,网上有下载,下面附送一份: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OleDb; using System.Data