PriorityQueue
PriorityQueue
是 Java 中的一个类,实现了优先队列的数据结构。它是基于优先级堆的一种实现,用于存储具有优先级的元素。在优先队列中,元素按照它们的优先级(或权重)进行排序,队列头部始终包含最高(或最低)优先级的元素。
在 Java 中,
PriorityQueue
默认是小根堆(min-heap)。这意味着队列的头部元素是具有最小值的元素,根据元素的自然顺序或者使用提供的比较器进行排序。
// 使用匿名内部类创建大根堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o2, o1);
}
});
常用方法
以下是 PriorityQueue
类的一些常用方法:
-
add(E e)
/offer(E e)
:- 用于将元素插入优先队列。
- 如果成功,返回
true
;如果队列已满,抛出IllegalStateException
。
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(); priorityQueue.add(5); priorityQueue.offer(2);
-
peek()
:- 返回队列头部的元素,但不移除。
- 如果队列为空,返回
null
。
Integer peekedElement = priorityQueue.peek();
-
poll()
:- 移除并返回队列头部的元素。
- 如果队列为空,返回
null
。
Integer polledElement = priorityQueue.poll();
-
remove(Object o)
:- 从队列中移除指定的元素。
- 如果元素不存在,不会抛出异常,只是返回
false
。
boolean removed = priorityQueue.remove(2);
-
size()
:- 返回队列中的元素个数。
int size = priorityQueue.size();
-
isEmpty()
:- 判断队列是否为空。
boolean empty = priorityQueue.isEmpty();
-
clear()
:- 移除队列中的所有元素。
priorityQueue.clear();
关于 PriorityQueue
的主要作用和用途:
- 优先级排序:
PriorityQueue
通过自然顺序或通过提供的比较器来排序元素。这使得你能够按照特定的顺序(升序、降序等)访问队列中的元素。 - 高效的插入和删除操作:
PriorityQueue
提供了高效的插入和删除操作。插入元素时,它会根据优先级自动调整元素的位置,确保队列中的元素始终按照优先级有序。删除操作会移除并返回队列头部的元素。 - 实现优先级队列: 优先队列在很多算法和应用中非常有用,比如Dijkstra算法、Prim算法等。在这些算法中,需要不断地从队列中取出优先级最高的元素来进行处理。