0

这是我写的比较器,用于根据成本对节点进行排序。

public class MyCostComparator implements Comparator<Node>{
    public int compare(Node a, Node b){
        if(a.pathCost > b.pathCost)
            return 1;
        else
            return -1;
    }
}

我发现它在我的机器(Java 1.7)和 Uni 的服务器(Java 1.5)上的行为是不同的。但是,当我做到这一点时:

if(a.pathCost >= b.pathCost),它似乎在 1.5 上运行良好,但在 1.7 上则相反。

另外,当值相等时不返回零的缺点是什么?

4

2 回答 2

8

“缺点”是TreeSet, TreeMap, 和基本上所有基于比较的数据结构根本不起作用。一点儿都没有。特别是,TreeSet.contains始终返回false并且TreeMap.get始终返回 null。

于 2013-02-15T20:52:18.460 回答
5

如果你从不返回零,那么一个对象将看起来不等于它自己。这违反了合同Comparable并阻止任何依赖它的集合正常工作(或根本不工作)。

Java 7 还引入了一种新的排序算法,如果它检测到违反了合约Collections.sort,就会抛出一个。这是对早期版本的更改,它默默地忽略了这一事实。IllegalArgumentExceptionComparable

于 2013-02-15T20:52:35.040 回答