Java PriorityQueue 类



简介

Java PriorityQueue 类是一个基于优先级堆的无界优先级队列。以下是关于 PriorityQueue 的重要几点:

  • 优先级队列的元素根据它们的自然顺序排序,或者根据在队列构造时提供的比较器排序,这取决于使用哪个构造函数。

  • 优先级队列不允许空元素。

  • 依赖自然顺序的优先级队列也不允许插入不可比较的对象。

类声明

以下是java.util.PriorityQueue类的声明:

public class PriorityQueue<E>
   extends AbstractQueue<E>
   implements Serializable

参数

以下是java.util.PriorityQueue类的参数:

E - 这是此集合中保存的元素的类型。

类构造函数

序号 构造函数和描述
1

PriorityQueue()

这将创建一个具有默认初始容量 (11) 的 PriorityQueue,它根据其元素的自然顺序对其进行排序。

2

PriorityQueue(Collection<? extends E> c)

这将创建一个包含指定集合中元素的 PriorityQueue。

3

PriorityQueue(int initialCapacity)

这将创建一个具有指定初始容量的 PriorityQueue,它根据其元素的自然顺序对其进行排序。

4

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

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

5

PriorityQueue(PriorityQueue<? extends E> c)

这将创建一个包含指定优先级队列中元素的 PriorityQueue。

6

PriorityQueue(SortedSet<? extends E> c)

这将创建一个包含指定有序集中元素的 PriorityQueue。

类方法

序号 方法和描述
1 boolean add(E e)

此方法将指定的元素插入到此优先级队列中。

2 void clear()

此方法从此优先级队列中删除所有元素。

3 Comparator<? super E> comparator()

此方法返回用于对该队列中的元素进行排序的比较器,如果此队列是根据其元素的自然顺序排序的,则返回 null。

4 boolean contains(Object o)

如果此队列包含指定的元素,则此方法返回 true。

5 void forEach​(Consumer<? super E> action)

此方法对 Iterable 的每个元素执行给定的操作,直到所有元素都已处理或操作引发异常。

6 Iterator<E> iterator()

此方法返回此队列中元素的迭代器。

7 boolean offer(E e)

此方法将指定的元素插入到此优先级队列中。

8 boolean remove(Object o)

如果存在,此方法从此队列中删除指定元素的一个实例。

9 boolean removeAll​(Collection<?> c)

此方法删除此集合中也包含在指定集合中的所有元素(可选操作)。

10 boolean removeIf​(Predicate<? super E> filter)

此方法删除满足给定谓词的此集合的所有元素。

11 boolean retainAll​(Collection<?> c)

此方法仅保留此集合中包含在指定集合中的元素(可选操作)。

12 Spliterator<E> spliterator()

此方法在此队列中的元素上创建一个延迟绑定且快速失败的 Spliterator。

13 <T> T[] toArray(T[] a)

此方法返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。

继承的方法

此类继承自以下类的 方法:

  • java.util.AbstractQueue
  • java.util.AbstractCollection
  • java.util.Object
  • java.util.Collection

向优先级队列添加项示例

以下示例显示了 Java PriorityQueue add(E) 方法的使用,用于添加整数。我们使用 add() 方法为每个元素添加几个整数到 PriorityQueue 对象,然后打印每个元素以显示已添加的元素。

package com.tutorialspoint;

import java.util.PriorityQueue;

public class PriorityQueueDemo {
   public static void main(String[] args) {
      
      // create an empty priority queue with an initial capacity
      PriorityQueue<Integer> queue = new PriorityQueue<>(5);

      // use add() method to add elements in the queue
      queue.add(20);
      queue.add(30);
      queue.add(20);
      queue.add(30);
      queue.add(15);
      queue.add(22);
      queue.add(11);

      // let us print all the elements available in queue
      for (Integer number : queue) {
         System.out.println("Number = " + number);
      }
   }
}

让我们编译并运行上述程序,这将产生以下结果:

Number = 11
Number = 20
Number = 15
Number = 30
Number = 30
Number = 22
Number = 20
广告