刷题的时候遇到了一个题要用到PriorityQueue,所以查查资料,以后备用。
定义:
- public class PriorityQueue<E>extends AbstractQueue<E>implements Serializable
不同于传统的Queue,PriorityQueue并不是通常情况下,默认的FIFO,而是自定义一种优先级的方式,每次输出是最高优先级的数据,而不是第一次进入的数据。比如优先级设置为,每次输出都是整个queue中最大的数,但这个这个最大的数并不一最先进入的。
- PriorityQueue()
- 使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。
- PriorityQueue(Collection<? extends E> c)
- 创建包含指定 collection 中元素的 PriorityQueue。
- PriorityQueue(int initialCapacity)
- 使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。
- PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
- 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器对元素进行排序。
- PriorityQueue(PriorityQueue<? extends E> c)
- 创建包含指定优先级队列元素的 PriorityQueue。
- PriorityQueue(SortedSet<? extends E> c)
- 创建包含指定有序 set 元素的 PriorityQueue。
常见API:
添加:
- add(E e)
- 将指定的元素插入此优先级队列。
移除所有:
- clear()
- 从此优先级队列中移除所有元素。
是否包含
- contains(Object o)
- 如果此队列包含指定的元素,则返回 true。
取出:
- peek()
- 获取但不移除此队列的头;如果此队列为空,则返回 null。
[html] view plain copy
- poll()
- 获取并移除此队列的头,如果此队列为空,则返回 null。
删除
[html] view plain copy
- remove(Object o)
- 从此队列中移除指定元素的单个实例(如果存在)。
下面看个例子:每次输出最大的那个数字:
[html] view plain copy
- public class demo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] A = {1,3,5,7,9,2,4,6,8,10};
- PriorityQueue<Integer> queue = new PriorityQueue<Integer>(A.length,new Comparator<Integer>(){
- @Override
- public int compare(java.lang.Integer o1, java.lang.Integer o2) {
- // TODO Auto-generated method stub
- return o2-o1;
- }
- });
- for(int i:A){
- queue.add(i);
- }
- System.out.println("---"+queue.isEmpty());
- while(!queue.isEmpty()){
- System.out.println(queue.poll());
- }
- }
- }
结果:
- 10
- 9
- 8
- 7
- 6
- 5
- 4
- 3
- 2
- 1