📜  如何在java中创建对的优先级队列(1)

📅  最后修改于: 2023-12-03 15:08:54.739000             🧑  作者: Mango

如何在Java中创建优先级队列

优先级队列是一个常见的数据结构,它可以根据元素的优先级保持有序。在Java中,优先级队列是通过 PriorityQueue 类来实现的。本文将介绍如何在Java中创建优先级队列。

创建优先级队列

要创建一个优先级队列,需要创建一个 PriorityQueue 类的对象。该类提供两种方式来定义元素的优先级:

  1. 通过元素的自然排序;
  2. 通过提供一个 Comparator 对象来定义。
创建自然排序的优先级队列

如果元素实现了 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类的常用方法

下面是 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 类提供了一个有用的实现,可以轻松地创建和使用优先级队列。