Thinking in Java [Java编程机制] 学习笔记 -- Priority Queue

来源:互联网 发布:交大网络教育学院登录 编辑:程序博客网 时间:2024/05/22 03:45

Priority Queue是优先级队列,也是我们平时说的堆,可以实现O(1)获取最大/最小元素,维护操作时间复杂度O(logN)

常用API,具体参见PriorityQueue:

构造方法摘要PriorityQueue() 
          使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。PriorityQueue(Collection<? extends E> c) 
          创建包含指定 collection 中元素的 PriorityQueuePriorityQueue(int initialCapacity) 
          使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 
          使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器对元素进行排序。PriorityQueue(PriorityQueue<? extends E> c) 
          创建包含指定优先级队列元素的 PriorityQueuePriorityQueue(SortedSet<? extends E> c) 
          创建包含指定有序 set 元素的 PriorityQueue



方法摘要 booleanadd(E e) 
          将指定的元素插入此优先级队列。 voidclear() 
          从此优先级队列中移除所有元素。 Comparator<? super E>comparator() 
          返回用来对此队列中的元素进行排序的比较器;如果此队列根据其元素的自然顺序进行排序,则返回 null booleancontains(Object o) 
          如果此队列包含指定的元素,则返回 true Iterator<E>iterator() 
          返回在此队列中的元素上进行迭代的迭代器。 booleanoffer(E e) 
          将指定的元素插入此优先级队列。 Epeek() 
          获取但不移除此队列的头;如果此队列为空,则返回 null Epoll() 
          获取并移除此队列的头,如果此队列为空,则返回 null booleanremove(Object o) 
          从此队列中移除指定元素的单个实例(如果存在)。 intsize() 
          返回此 collection 中的元素数。 Object[]toArray() 
          返回一个包含此队列所有元素的数组。<T> T[]toArray(T[] a) 
          返回一个包含此队列所有元素的数组;返回数组的运行时类型是指定数组的类型。

我们在使用时经常使用最大堆或者最小堆。PriorityQueue默认是最小堆,如果需要使用最大堆,需要重写Comparator对象的compare函数,例子如下:

Comparator<Integer> cmp;cmp = new Comparator<Integer>() {public int compare(Integer e1, Integer e2) {return e2 - e1;}};Queue<Integer> q2 = new PriorityQueue<Integer>(5,cmp);

原创粉丝点击