PriorityQueue

本文通过实例对比了普通队列与优先队列的行为差异。普通队列遵循先进先出原则,而优先队列则按元素优先级排序。通过Java实现展示了不同场景下两者的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前数据结构课学过队列,知道了队列是先进先出的数据结构,就像排队,先到先得。然而在最近,我却看到了一个“尊老爱幼”的队列,他会把位置让给优先权最高的元素。


下面先做个例子:

package org.jian.test;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

public class PriorityQueueTest {
	public static void main(String[] args) {
		Queue<Person> priorityQueue = new PriorityQueue<Person>() ;
		Queue<Person> queue = new LinkedList<Person>() ;
		
		Person p1 = new Person("jian" , 20) ;
		Person p2 = new Person("hundun" , 23) ;
		Person p3 = new Person("martin" , 17) ;
		Person p4 = new Person("wu" , 33) ;
		Person p5 = new Person("openjdk8" , 32) ;
		Person p6 = new Person("dou" , 41) ;
		Person p7 = new Person("tao" , 14) ;
		
		
		//优先队列入队
		priorityQueue.offer(p1) ;
		priorityQueue.offer(p2) ;
		priorityQueue.offer(p3) ;
		priorityQueue.offer(p4) ;
		priorityQueue.offer(p5) ;
		priorityQueue.offer(p6) ;
		priorityQueue.offer(p7) ;
		
		//-----------------------
		//普通队列入队
		queue.offer(p1) ;
		queue.offer(p2) ;
		queue.offer(p3) ;
		queue.offer(p4) ;
		queue.offer(p5) ;
		queue.offer(p6) ;
		queue.offer(p7) ;
		
		
		System.out.println("普通队列测试--------------------------------------------------------------");
		Person person = null ;
		while((person=queue.poll())!=null){
			System.out.println("姓名:"+person.getName()+",年龄为:"+person.getAge());
		}
		System.out.println("优先队列测试--------------------------------------------------------------");
		while((person=priorityQueue.poll())!=null){
			System.out.println("姓名:"+person.getName()+",年龄为:"+person.getAge());
		}
	}
}
/**
 * 继承了Comparable接口
 * @author Administrator
 *
 */
class Person implements Comparable{   
	private String name ;
	private int age ;
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	/**
	 * 通过年龄的大小进行比较
	 */
	@Override
	public int compareTo(Object o) {
		Person p = (Person)o ;
		
		if(this.age>p.age){
			return 1 ;
		}else if(this.age==p.age){
			return 0 ;
		}else {
			return -1 ;
		}
	}
	
	
}

运行结果:


+--------------------------------------------------------------------------------------------------------

普通队列测试--------------------------------------------------------------
姓名:jian,年龄为:20
姓名:hundun,年龄为:23
姓名:martin,年龄为:17
姓名:wu,年龄为:33
姓名:openjdk8,年龄为:32
姓名:dou,年龄为:41
姓名:tao,年龄为:14
优先队列测试--------------------------------------------------------------
姓名:tao,年龄为:14
姓名:martin,年龄为:17
姓名:jian,年龄为:20
姓名:hundun,年龄为:23
姓名:openjdk8,年龄为:32
姓名:wu,年龄为:33
姓名:dou,年龄为:41

+--------------------------------------------------------------------------------------------------------

显然我们看到了普通队列是按“先到先得排列的”,而优先队列则是按对象的“大小”进行排列的,真可谓“尊老爱幼”。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值