优先队列PriorityQueue<> (a, b) 您所在的位置:网站首页 实现一个优先队列什么意思啊英语 优先队列PriorityQueue<> (a, b)

优先队列PriorityQueue<> (a, b)

2023-03-21 15:15| 来源: 网络整理| 查看: 265

1.介绍

PriorityQueue 是 Java 中的一个队列实现,是一种基于优先级堆(Priority Heap)的数据结构。它可以用于实现一些基于优先级的算法和应用,例如 Dijkstra 算法、A*算法等等。

在这里,我们创建了一个 PriorityQueue 对象 maxHeap,并传入了一个比较器对象 (a, b) -> b - a 作为参数。这个比较器用于定义元素之间的优先级,即元素大小的比较方式。

(a, b) -> b - a 表示将两个元素 a 和 b 进行比较

如果 a 比 b 大,则返回一个负数如果 a 比 b 小,则返回一个正数如果 a 和 b 相等,则返回 0。这里我们将 b - a 作为返回值,表示我们希望较大的元素在队列中具有较高的优先级,也就是说,我们创建的是一个最大堆。

因此,通过 PriorityQueue 的实现,我们可以很方便地实现一个基于优先级的队列,将元素按照一定的顺序加入队列,并在取出元素时,始终取出当前队列中优先级最高的元素。

2.代码 public class Test { public static void main(String[] args) { // 创建一个最大堆,用于存储整数类型的数据 PriorityQueue maxHeap = new PriorityQueue((a, b) -> b - a); // 将一些数据加入堆中 maxHeap.offer(3); maxHeap.offer(1); maxHeap.offer(4); maxHeap.offer(1); maxHeap.offer(5); // 不断取出优先级最高的元素,直到堆为空为止 while (!maxHeap.isEmpty()) { int cur = maxHeap.poll(); System.out.print(cur + " "); } // 输出:5 4 3 1 1 } } 5 4 3 1 1

在上面的代码中,我们创建了一个最大堆 maxHeap,使用 PriorityQueue 类型的对象来实现。这里我们使用了一个 lambda 表达式 (a, b) -> b - a 来定义元素的优先级顺序,其中 b - a 表示较大的元素具有较高的优先级,即我们创建的是一个最大堆。

我们将一些整数数据加入堆中,可以使用 offer() 方法向堆中添加元素,这里我们添加了 3、1、4、1、5 这五个整数。

然后我们使用 poll() 方法来取出当前堆中优先级最高的元素,并打印输出。在本例中,我们不断取出堆顶元素,直到堆为空为止,输出的结果为:5 4 3 1 1。

在实际应用中,最大堆和最小堆都可以用来实现优先队列,具体使用哪一种取决于实际应用场景和需求。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有