Java 的 PriorityQueue 与最小堆有何不同?
如果您不能insertWithPriority,为什么他们要命名PriorityQueue
?它看起来与堆非常相似。有什么区别吗?如果没有区别,那么为什么它被命名为PriorityQueue而不是Heap?
Why did they name PriorityQueue
if you can't insertWithPriority? It seems very similar to a heap. Are there any differences? If no difference, then why was it named PriorityQueue
and not Heap?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
默认的PriorityQueue是用Min-Heap实现的,即栈顶元素是堆中最小的元素。
为了实现最大堆,您可以创建自己的比较器:
因此,您可以通过以下方式创建最小堆和最大堆:
The default PriorityQueue is implemented with Min-Heap, that is the top element is the minimum one in the heap.
In order to implement a max-heap, you can create your own Comparator:
So, you can create a min-heap and max-heap in the following way:
对于最大堆,您可以使用:
For max-heap you can use:
Add() 的工作方式类似于 insertWithPriority。
您可以使用构造函数定义所需类型的优先级:
查看 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/PriorityQueue.html
比较器给出的顺序将代表队列中的优先级。
Add() works like an insertWithPriority.
You can define priority for the type that you want using the constructor:
look under https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/PriorityQueue.html
The order the Comparator gives will represent the priority in the queue.
其他答案中描述的默认行为
最小堆(默认):
对于最大堆:
Default behaviour as described in other answers
Min Heap(Default):
For Max Heap:
来自 Java 文档
这是使用
PriorityQueue
的 maxHeap 和 minHeap 的工作代码 -示例 o/p :
From Java docs
Here is a working code for maxHeap and minHeap using
PriorityQueue
-sample o/p :
来自
PriorityQueue
JavaDocs< /a>:优先级是队列中对象的固有属性。元素根据某种比较进行排序。要插入具有给定优先级的某个对象,您只需设置对象上影响排序的任何字段,并且
add()
它。并且,正如 @Daniel 评论的那样,
From the
PriorityQueue
JavaDocs:Priority is meant to be an inherent property of the objects in the queue. The elements are ordered based on some sort of comparison. To insert some object with a given priority, you would just set whatever field(s) on the object affect the ordering, and
add()
it.And, as @Daniel commented,
来自 http://docs.oracle.com/javase /7/docs/api/java/util/PriorityQueue.html
为整数、长整型、浮点型、双精度型、字符型、布尔型提供的比较器进行排序(即原始数据类型)自然排序是升序,这就是为什么 Arrays.sort(arr) {其中 arr 是原始数据类型的数组}按升序对 arr 的值进行排序。您可以使用比较器更改自然顺序
比较器可以通过两种方式使用
其中一种方式是DpGeek 展示了
另一种方法是使用匿名类。例如
Arrays.sort(arr, (Integer x, Integer y) -> y - x);
这会按降序对数组 arr 进行排序
From http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
for integer, long, float, double, character, boolean (i.e. primitive data types) the natural ordering is ascending order, that's why Arrays.sort(arr) {where arr is an array of primitive data type} sorts the value of arr in ascending order. You can change the natural ordering by using a Comparator
Comparator can be used in two ways either
One of the way is how DpGeek showed
Another way is by using Anonymous Class. For example
Arrays.sort(arr, (Integer x, Integer y) -> y - x);
This sorts the array arr in descending order