我正在阅读javadocs中的PriorityQueues,它提到了打破平局一词。我无法理解这个词是什么意思。我希望有人能解释一下。
答案 0 :(得分:6)
在Java中,使用compare(a,b)
方法(对于比较器)或a.compareTo(b)
方法(对于可以比较的类实例)进行比较。该方法应该在a < b
时返回负数,在a > b
时返回正数,在0
时返回a = b
。
然而,有时人们只使用返回值0
来表示a
和b
是无法比拟的(某些排序不是全部)。在这种情况下,PriorityQueue
必须决定哪个元素首先出现。这是打破平局。特别是一些优先级队列保留了插入零比较元素的顺序,因此在这种情况下插入时间是决胜局。然后,对于compareTo()
总是返回0
的元素集合,优先级队列的行为就像普通队列一样。
答案 1 :(得分:3)
如果您有一个使用Node.Score分配优先级的优先级Que,如果两个分数相同,则表示您具有平局。
您可以对可比较的元素实施先进先出的打破平局。如果两个分数相同,则优先考虑首先添加的节点。
if(NodeA.getScore() == NodeB.getScore()){
//this is a tie
if(NodeA.getOrderAdded() > NodeB.GetOrderAdded(){
//NodeA has priority
} else {
//NodeB has priority
}
}