Java数据结构-优先级队列

Java中的优先级队列(Priority Queue)是Java集合框架的一部分,它实现了Queue接口,并允许存储的元素具有一定的优先级。优先级队列是自然排序的,或者根据创建优先级队列时提供的Comparator进行排序。这意味着队列的头部是优先级最高的元素。如果多个元素具有相同的优先级,则它们按照它们在队列中的顺序排序。

在Java中,优先级队列通常通过PriorityQueue类实现。以下是一个简单的示例:

java 复制代码
import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // 创建一个优先级队列
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        // 添加元素到优先级队列
        pq.add(3);
        pq.add(1);
        pq.add(4);
        pq.add(1);
        pq.add(5);
        pq.add(9);
        pq.add(2);
        pq.add(6);

        // 打印优先级队列的元素
        while (!pq.isEmpty()) {
            System.out.println(pq.poll());
        }
    }
}

在上面的示例中,我们创建了一个PriorityQueue对象,并添加了一些整数。由于PriorityQueue默认使用自然排序(对于整数,就是从小到大的顺序),因此当我们打印队列的元素时,它们将按照从小到大的顺序打印。

你也可以通过提供一个自定义的Comparator来改变排序规则。例如,如果你想要一个优先级队列,其中元素按照从大到小的顺序排列,你可以这样做:

java 复制代码
import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // 创建一个优先级队列,并使用自定义的Comparator
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1; // 降序排列
            }
        });

        // 添加元素到优先级队列
        pq.add(3);
        pq.add(1);
        pq.add(4);
        pq.add(1);
        pq.add(5);
        pq.add(9);
        pq.add(2);
        pq.add(6);

        // 打印优先级队列的元素
        while (!pq.isEmpty()) {
            System.out.println(pq.poll());
        }
    }
}

在这个例子中,我们创建了一个PriorityQueue对象,并提供了一个自定义的Comparator。这个Comparator将元素按照从大到小的顺序排列。因此,当我们打印队列的元素时,它们将按照从大到小的顺序打印。

相关推荐
哈里谢顿3 小时前
跳表(Skip List):简单高效的有序数据结构
数据结构
兆子龙4 小时前
ahooks useRequest 深度解析:一个 Hook 搞定所有请求
java·javascript
兆子龙4 小时前
React Suspense 从入门到实战:让异步加载更优雅
java·javascript
咕白m6257 小时前
Java 实现 Excel 转 HTML:完整示例
java
RealPluto7 小时前
Spring AOP 失效排查
java·spring
码路飞8 小时前
热榜全是 OpenClaw,但我用 50 行 Python 就造了个桌面 AI Agent 🤖
java·javascript
Nyarlathotep01138 小时前
LinkedList源码分析
java·后端
CoovallyAIHub8 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉