首先,对于队列,想必大家并不陌生;
队列的先进先出策略在我们做题的时候很好的帮助了我们理解题目;
基于优先级堆的无限优先级queue。优先级队列的元素根据他们的有序natural ordering,或由一个Comparator在队列构造的时候提供,这取决于所使用的构造方法。优先队列不允许null元素。依靠自然排序的优先级队列也不允许插入不可比较的对象(这样做可能导致classcastException)。
该队列的头部是相对于指定顺序的最小元素。如果多个元素被绑定到最小值,那么头就是这些元素之一——关系被破坏。队列检索操作poll,remove,peek和element。
优先级队列是无限制的,但具有管理用于在队列上存储元素数组的大小的内部容量。它始终至少与队列大小一样大。当元素被添加到优先级队列中时,其容量会自动增长。没有规定增长政策的细节。
该类及其迭代器实现Collection和Iterator接口的所有可选方法。方法iterator()中提供的迭代器不能保证以任何特定顺序遍历优先级队列的元素。如果需要优序遍历,请考虑使用Arrays.sort(pq.toArray())。
请注意此实现不同步。如果任何线程修改队列,多线程不应同时访问PriorityQueue实例。而是使用线程安全的PriorityBlockQueue类。
PriorityQueue() 创建一个 |
PriorityQueue(Collection<? extends E> c) 创建一个 |
PriorityQueue(Comparator<? super E> comparator) 创建具有默认初始容量的 |
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 创建具有 |
PriorityQueue(int initialCapacity) 创建 |
PriorityQueue(PriorityQueue<? extends E> c) 创建包含 |
PriorityQueue(SortedSet<? extends E> c) 创建一个 |
可以试着构造一下;
用法和队列差不多;
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); //从大到小的顺序
}
}