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

对PriorityQueue使用比较器和单独的compareTo方法

从建明
2023-03-14

如果我有一个由T对象组成的PriorityQueue,并且T有一个compareTo()方法并实现comparable,但是我的PriorityQueue也使用一个comparator作为参数,那么我的PriorityQueue在元素的顺序方面会寻找什么?

换句话说,哪一个决定了对象的优先级?compareTo()方法或提供的比较器?

共有3个答案

董和泽
2023-03-14

我正在通读Oracle实现PriorityQueue类的源代码,它检查是否正在使用比较器并首先使用它。否则,它将使用可比对象。

公羊曜灿
2023-03-14

对于标准优先级队列,如果使用比较器构造它

凌朗
2023-03-14

构造函数的比较器参数的留档声明

比较器-用于排序此优先级队列的比较器。如果为null,则顺序取决于元素的自然顺序。

这意味着当指定了比较器时,由compareTo方法建立的自然顺序将被忽略。

 类似资料:
  • 问题内容: 我正在学习数组,基本上我有一个可以收集姓氏,名字和分数的数组。 我需要编写一个将姓氏与名字进行比较的方法,以便可以按姓氏开头的字母顺序对列表进行排序,然后,如果两个人的姓氏相同,则将对姓氏进行排序。 我很困惑,因为我书中的所有信息都是在比较数字,而不是对象和字符串。 到目前为止,这是我编写的代码。我知道这是错误的,但至少可以解释我在做什么: 我知道和符号是错误的,但是就像我说的那样,我

  • 在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。

  • 我希望有一个更具体的可比接口,以便我可以更好地键入返回参数。该界面目前如下所示: 现在,当我尝试对这些更具体的可比值列表进行排序时,如下所示,我收到一个错误,因为b的类型是“RankComparable”而不是类型“T”。 为了解决这个问题,我可以实现如下所示的Self方法。这将解决我的问题,但它看起来非常丑陋。如果有人能找到解决这个问题的更好的办法,我会很高兴。

  • 问题内容: 例如,如果我要比较字符串“ Hello”和“ World”。 怎么知道Hello大于World? 我唯一能想到的是,也许它使用ASCII表作为参考? 谢谢您的帮助! 问题答案: 它按 字典顺序 比较两个字符串。在String API中 检查此处。 如果两个字符串不同,那么它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都不同。如果它们在一个或

  • 我正在将边添加到PriorityQueue,但由于某些原因,它们没有按其值进行排序,从而导致以后出现错误的结果。 我的边缘班是这样的 然而,当我运行我的代码,在属于节点“Springfield,MO”的LinkedList中将所有内容添加到PriorityQueue时,边按错误的顺序排序,如下图所示,问题是什么? 我尝试为Edge创建一个特定的比较器类,并将其用作PriorityQueue中的参数

  • 是的,这是家庭作业,但我一直在想什么。comparator类应该实现java。util。sort()方法的第二个参数应该是我的Comparator类的一个实例。 到目前为止,我的comparator类如下所示: 我有一个单独的方法对数组进行排序,但此方法使用compareTo() 除了使用单独的comparator类之外,我应该使用什么方法?我完全不知道该怎么办。 我的Rational类看起来像: