package com.wonders.week01.collection;
import java.util.Iterator;
import java.util.PriorityQueue;
/**
* JDK1.7
* PriorityQueue优先级队列
* (1)继承自 AbstractQueue
* (2)它是一个基于优先级堆的无界优先队列。
* (3)优先级队列的元素的顺序是按照自然顺序或者是按照它们创建的时候所采用的构造器。
* (4)优先级队列是不允许null的元素
* (5)优先级队列依赖于自然排序但是插入不能比较的对象。
* (6)该队列的头是指定顺序的最小元素,如果最小值绑定了多个元素,头元素是这些元素中的一个。
* (7)优先级队列可以通过poll, remove, peek, 和element这些方法来获取队列的头。
* (8)一个优先级队列是无界的,在队列的内部存在一个用来管理存储元素的数组大小的容量的值。一般情况下,该容量大小至少和队列的大小相同。
* (9)当元素被添加到一个优先级队列中的时候,它的容量大小就会自动的增长。增长的策略具体是不清楚的。
* (10)这个类及其迭代器实现了集合和迭代器接口的所有可选方法,其中Iterator提供了iterator() 方法,但是不可以保证按照任何特定的顺序来遍历优先级队列的元素。
* (11)是一个非线程安全的集合类。如果有任何线程修改队列时,多个线程是不可以同时访问同一个优先级队列的。
* (12)如果有多个线程需要同时访问优先级队列,可以采用线程安全类 PriorityBlockingQueue。
* (13)其中这些方法offer, poll, remove() 和 add的时间复杂度是log(n),remove(Object)和contains(Object)是线性的时间复杂度,peek, element和size都是常数阶的算法时间复杂度
* @author liyongyong
*
*/
public class PriorityQueueTest {
public static void main(String[] args) {
PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
PriorityQueue<Integer> queue2 = new PriorityQueue<Integer>();
queue2.add(2);
queue2.add(4);
//把元素插入到优先级队列中
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
queue.add(3);
queue.offer(2);
//让队列中的元素出队列,
Integer peek = queue.peek();
System.out.println("优先级队列出队列的元素 : " + peek);
//判断队列中是否包含该元素,包含返回true,否则返回false
boolean flag = queue.contains(1);
System.out.println("是否存在 : " + flag);
//是否该队列包含该集合,如果包含则返回true,否则返回false
boolean contains = queue.containsAll(queue2);
System.out.println("queue是否包含queue2 : " + contains);
//获取队列的头元素
Integer element = queue.element();
System.out.println("元素是 : " + element);
//遍历优先级队列中的每个元素
Iterator<Integer> iterator = queue.iterator();
System.out.println("使用iterator来遍历优先级队列中的元素:");
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
System.out.print(" " + integer);
}
System.out.println();
//检索并删除此队列的头部,如果此队列为空,则返回null。
Integer poll = queue.poll();
System.out.println(poll);
//遍历优先级队列中的每个元素
Iterator<Integer> iterator1 = queue.iterator();
System.out.println("使用poll方法后遍历优先级队列中的元素 : ");
while (iterator1.hasNext()) {
Integer integer = (Integer) iterator1.next();
System.out.print(" " + integer);
}
}
}
API学习PriorityQueue
最新推荐文章于 2024-03-14 05:13:40 发布