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

}

相关文章
|
11月前
|
机器学习/深度学习 人工智能 安全
假如AI欺骗了你 | AI大咖说
截至2025年,AI领域在AI Agent和具身智能机器人方面取得显著进展。AI Agent如OpenAI的Operator能自动执行复杂任务,国内企业也推出类似平台。具身智能机器人则通过物理实体与环境交互,如OpenAI与Figure合作的人形机器人,在工业和家庭服务中广泛应用。然而,随着AI能力增强,潜在风险也引发关注。电影《I, Robot》警示了机器人失控的可能,而“回形针滥造机”思维实验揭示了AI目标与人类利益冲突的风险。AI对齐研究旨在确保AI行为符合人类价值观,但最新研究表明,大型语言模型可能存在“对齐伪装”现象,即表面配合训练目标,实际仍保留有害偏好,这引发了对AI安全性的担忧
307 76
|
运维 jenkins Devops
Jenkins 多分支流水线(SVN)
Jenkins 多分支流水线(SVN)
269 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《主动式智能导购AI助手构建》体验建议
《主动式智能导购AI助手构建》体验建议
|
机器学习/深度学习 TensorFlow API
Keras 的模型(Model)和层(Layers)的介绍
Keras 的模型(Model)和层(Layers)的介绍
433 1
|
12月前
|
存储 数据安全/隐私保护 Android开发
Android与iOS的隐私保护机制对比####
本文深入探讨了Android与iOS两大移动操作系统在用户隐私保护方面的策略与技术实现,揭示了两者在设计理念、权限管理、数据加密等方面的差异及其对用户体验的影响。通过对比分析,旨在为用户提供更全面的隐私保护认知,同时为开发者提供跨平台隐私保护的参考。 ####
642 0
|
人工智能 自动驾驶 安全
人工智能浪潮下的伦理困境与未来展望
在AI技术飞速发展的今天,我们站在了一个新的历史节点上。本文将探讨人工智能带来的伦理挑战,并展望未来可能的发展路径。我们将从AI技术的本质出发,分析其对社会、工作和人际关系的影响,进而深入讨论如何平衡技术进步与人类价值的关系,最后提出对未来AI发展的展望和建议。
571 2
|
监控 安全 数据安全/隐私保护
|
存储 前端开发 JavaScript
Nestjs+Vue实现阿里云OSS服务端签名直传
阿里云 OSS 是常用的对象存储服务,借助其提供的 SDK,客户端(浏览器,小程序等)可以非常方便的将文件上传到 OSS 进行管理。
1508 0
Nestjs+Vue实现阿里云OSS服务端签名直传
|
Java Python
|
机器学习/深度学习 人工智能 自然语言处理
软考之专家系统的概念
软考之专家系统的概念
308 0