📅  最后修改于: 2023-12-03 15:08:54.739000             🧑  作者: Mango
优先级队列是一个常见的数据结构,它可以根据元素的优先级保持有序。在Java中,优先级队列是通过 PriorityQueue 类来实现的。本文将介绍如何在Java中创建优先级队列。
要创建一个优先级队列,需要创建一个 PriorityQueue 类的对象。该类提供两种方式来定义元素的优先级:
如果元素实现了 Comparable 接口,那么可以使用默认的自然排序来定义元素的优先级。以下是一个使用自然排序创建优先级队列的示例:
PriorityQueue<String> queue = new PriorityQueue<>();
queue.offer("apple"); // 添加元素
queue.offer("banana");
queue.offer("orange");
while (!queue.isEmpty()) {
System.out.println(queue.poll()); // 输出:apple banana orange
}
如果元素没有实现 Comparable 接口,或者你想要使用自定义的排序方式,那么可以提供一个 Comparator 对象来定义元素的优先级。以下是一个使用自定义比较器创建优先级队列的示例:
PriorityQueue<String> queue = new PriorityQueue<>(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length(); // 长度短的优先
}
});
queue.offer("apple");
queue.offer("banana");
queue.offer("orange");
while (!queue.isEmpty()) {
System.out.println(queue.poll()); // 输出:apple orange banana
}
下面是 PriorityQueue 类的常用方法:
| 方法 | 描述 |
| :----------------------------------------------------------- | ------------------------------------------------------------ |
| boolean offer(E e)
| 将指定的元素插入此优先级队列,返回 true。 如果队列已满,则返回 false。 |
| E poll()
| 获取并删除此队列的头,如果此队列为空,则返回 null。 |
| E peek()
| 获取但不删除此队列的头;如果此队列为空,则返回 null。 |
| int size()
| 返回此队列中的元素数量。 |
| void clear()
| 从此队列中移除所有元素。 |
| boolean isEmpty()
| 如果此队列不包含任何元素,则返回 true。 |
| Object[] toArray()
| 返回一个包含此队列所有元素的数组。 |
| Comparator<? super E> comparator()
| 返回用于对此队列中的元素进行排序的比较器;如果此队列根据其元素的自然顺序进行排序,则返回 null。 |
优先级队列是一个非常有用的数据结构,可以帮助我们保持元素有序,可以按照自然顺序或自定义顺序进行排序。Java中的 PriorityQueue 类提供了一个有用的实现,可以轻松地创建和使用优先级队列。