【算法思想篇】优先队列

首先,对于队列,想必大家并不陌生;

队列的先进先出策略在我们做题的时候很好的帮助了我们理解题目;

基于优先级堆的无限优先级queue。优先级队列的元素根据他们的有序natural ordering,或由一个Comparator在队列构造的时候提供,这取决于所使用的构造方法。优先队列不允许null元素。依靠自然排序的优先级队列也不允许插入不可比较的对象(这样做可能导致classcastException)。

该队列的头部是相对于指定顺序的最小元素。如果多个元素被绑定到最小值,那么头就是这些元素之一——关系被破坏。队列检索操作poll,remove,peek和element。

优先级队列是无限制的,但具有管理用于在队列上存储元素数组的大小的内部容量。它始终至少与队列大小一样大。当元素被添加到优先级队列中时,其容量会自动增长。没有规定增长政策的细节。

该类及其迭代器实现Collection和Iterator接口的所有可选方法。方法iterator()中提供的迭代器不能保证以任何特定顺序遍历优先级队列的元素。如果需要优序遍历,请考虑使用Arrays.sort(pq.toArray())。

请注意此实现不同步。如果任何线程修改队列,多线程不应同时访问PriorityQueue实例。而是使用线程安全的PriorityBlockQueue类。

构造方法
PriorityQueue()

创建一个PriorityQueue ,具有默认的初始容量(11),根据它们的natural ordering对其元素进行排序

PriorityQueue(Collection<? extends E> c)

创建一个 PriorityQueue集合中的元素的PriorityQueue。

PriorityQueue(Comparator<? super E> comparator)

创建具有默认初始容量的 PriorityQueue ,并根据指定的比较器对其元素进行排序。

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

创建具有 PriorityQueue初始容量的PriorityQueue,根据指定的比较器对其元素进行排序。

PriorityQueue(int initialCapacity)

创建PriorityQueue与根据它们的排序其元素指定的初始容量natural ordering

PriorityQueue(PriorityQueue<? extends E> c)

创建包含 PriorityQueue优先级队列中的元素的PriorityQueue。

PriorityQueue(SortedSet<? extends E> c)

创建一个 PriorityQueue指定排序集中的元素的PriorityQueue。

可以试着构造一下;

 用法和队列差不多;

package 贪心;

import java.util.Comparator;
import java.util.PriorityQueue;

public class 优先队列 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PriorityQueue<Integer> proque=new PriorityQueue<Integer>();
		proque.add(25);
		proque.add(3);
		while(!proque.isEmpty()) {
			System.out.println(proque.poll());
		}
		PriorityQueue<Integer> p=new PriorityQueue<Integer>(proque);
		p.add(5);
		while(!p.isEmpty()) {
			System.out.println(p.poll());
		}
		Comparator<Integer> cmp=new Comparator<Integer>() {
			
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o2-o1;
			}
		};
		PriorityQueue<Integer> p1=new PriorityQueue<Integer>(cmp);   //从大到小的顺序

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值