在Java 1.5和Java 1.7中覆盖'compare()'时不返回0的缺点

Cro*_*ode 0 java compare comparable comparator

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

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

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

if(a.pathCost >= b.pathCost) ,它似乎在1.5上工作正常,但1.7的另一种方式.

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

Lou*_*man 8

该"缺点"是TreeSet,TreeMap和基本上都是基于比较的数据结构不会在所有的工作.一点儿都没有.具体而言,TreeSet.contains始终返回false,并且TreeMap.get始终返回null.


Mar*_*nik 5

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

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