Java 数据结构 - 优先队列类
队列是一种抽象数据结构,与栈有些类似。与栈不同,队列的两端都是开放的。一端始终用于插入数据(入队),另一端始终用于删除数据(出队)。队列遵循先进先出 (FIFO) 的方法,即最先存储的数据项将首先被访问。
队列表示
现在我们已经了解到,在队列中,我们出于不同的原因访问两端。下图试图解释队列作为数据结构的表示形式:
与栈类似,队列也可以使用数组、链表、指针和结构来实现。为了简单起见,我们将使用一维数组来实现队列。
PriorityQueue 类
java.util.PriorityQueue 类是一个基于优先级堆的无界优先级队列。以下是关于 PriorityQueue 的一些重要要点:
优先级队列的元素根据其自然顺序或在队列构造时提供的 Comparator 进行排序,具体取决于使用哪个构造函数。
优先级队列不允许空元素。
依赖于自然顺序的优先级队列也不允许插入不可比较的对象。
类声明
以下是 java.util.PriorityQueue 类的声明:
public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable
参数
以下是 java.util.PriorityQueue 类的参数:
E - 这是此集合中保存的元素的类型。
类构造函数
序号 | 构造函数及描述 |
---|---|
1 | PriorityQueue() 这将创建一个 PriorityQueue,其默认初始容量为 (11),并根据其自然顺序对元素进行排序。 |
2 | PriorityQueue(Collection<? extends E> c) 这将创建一个包含指定集合中元素的 PriorityQueue。 |
3 | PriorityQueue(int initialCapacity) 这将创建一个具有指定初始容量的 PriorityQueue,并根据其自然顺序对元素进行排序。 |
4 | PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 这将创建一个具有指定初始容量的 PriorityQueue,并根据指定的 Comparator 对元素进行排序。 |
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() 此方法返回用于对队列中元素进行排序的 Comparator,如果此队列根据其元素的自然顺序进行排序,则返回 null。 |
4 | boolean contains(Object o) 如果此队列包含指定的元素,则此方法返回 true。 |
5 | Iterator<E> iterator() 此方法返回此队列中元素的迭代器。 |
6 | boolean offer(E e) 此方法将指定的元素插入此优先级队列。 |
7 | E peek() 此方法检索但不删除此队列的头,如果此队列为空,则返回 null。 |
8 | E poll() 此方法检索并删除此队列的头,如果此队列为空,则返回 null。 |
9 | boolean remove(Object o) 如果存在,此方法从此队列中删除指定元素的一个实例。 |
10 | int size() 此方法返回此集合中元素的数量。 |
11 | Object[] toArray() 此方法返回一个包含此队列中所有元素的数组。 |
12 | <T> T[] toArray(T[] a) 此方法返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。 |