3

我正在阅读 javadocs 中的 PriorityQueues ,它提到了 tie-break 一词。我无法理解这个词是什么意思。我希望有人能解释一下。

4

2 回答 2

8

在 Java 中,比较是使用compare(a,b)方法(用于比较器)或a.compareTo(b)方法(用于可以比较的类实例)完成的。这个方法应该在任何时候返回一个负数a < b,一个正数 whena > b0when a = b

然而,有时人们只是使用返回值0来表示a并且b是无法比较的(一些排序不是总的)。在这种情况下,PriorityQueue必须决定哪个元素先行。这是打破平局。具体来说,一些优先级队列保留了插入零比较元素的顺序,因此在这种情况下,插入时间是决胜局。然后对于compareTo()总是返回的元素集合0,优先级队列的行为就像一个普通队列。

于 2013-06-26T21:43:18.297 回答
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
    }
}
于 2013-06-26T21:42:05.393 回答