当前位置: 首页 > 知识库问答 >
问题:

在优先级队列中,哪个优先,比较器还是可比较的自然顺序?

宰父浩漫
2023-03-14

如果我有一个PriorityQueue,它有一个Comparator,一个element类实现了Comparable类,以及它们的排序冲突,那么队列将如何处理排序?它是抛出异常还是忽略一个排序规则?

共有1个答案

傅经业
2023-03-14

正如你在那里看到的:http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

优先级队列的元素根据其自然顺序进行排序,或者由队列构造时提供的比较器进行排序,具体取决于所使用的构造函数。

因此,实际上,如果它有一个特殊的compatiator作为施工时间,自然顺序比较(由compatible接口给出的)将被忽略。

这是您需要使用的构造函数,以便具有我刚才描述的行为:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

创建具有指定初始容量的PriorityQueue,该队列根据指定的比较器对其元素进行排序。

 类似资料:
  • 假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?

  • priority_queue,comparator(query,d)>min_heap; main.cpp:20:7:注意:“comparator”不是文字,因为: class comparator{ main.cpp:20:7:注意:“comparator”不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的constexpr构造函数 Main.cpp:92:65:注意:应为类型,但

  • 有人能解释一下这里使用的比较运算符的语法吗?它是做什么的

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我在Java使用PriorityQueue。 我有一个结构如下的对象: 优先考虑的是从最便宜到最贵的成本: 我使用add将对象包含在队列中。 它适用于队列中的每个元素,但我添加的最后一个元素总是位于底部。 我做错了什么?

  • 我使用的是PriorityQueue和我自己的比较器,但最终结果并不总是好的。我应该按平均成绩、姓名、身份证进行排序。最后,它应该返回队列中剩余的名称。其余的名字都很好,但顺序不同。输入(名称、平均等级、识别号): 预期产出: 我的结果: 你能帮我找出问题所在吗?提前谢谢你!