阿里巴巴Java开发手册——Comparator
最新澳门博彩导航
最新澳门博彩导航
当前位置 : 最新澳门博彩导航 > 澳门正规博彩十大网站

阿里巴巴Java开发手册——Comparator

上图是《阿里巴巴Java开发手册v1.2.0》中的说明,这里举了个反例,说没有处理相等的情况,但我想:

o1.getId > o2.getId

反过来不就是

o1.getId <= o2.getId

我平时都是这样用的,求大神在帮忙解释一下这个地方的技巧是什么?是什么原因?

进一步了解了一下,问题的根本原因是JDK7的排序实现改为了TimSort,详细见这篇文章。
http://blog.2baxb.me/archives...

一开始回答的时候并没有完全理解作者问问题的意图,回答得有点草率,为此道个歉。
分割线下是之前回答的内容,因为答案评论里有和@wanghaa 就旧有答案的讨论,因此保留,也谢谢@wanghaa 让我意识到问题。


public static void mainString[] args {
    int i = 1;
    int j = 1;
    int ret = i > j ? 1 : -1;
    System.out.printlnret;
}

上面的代码会输出-1,进行比较的两个取值相等的情况下应该返回0,返回-1肯定是不对的,所以一定要单独处理相等的情况。

应该要判断等于0 的情况

经过@gemoji的讨论终于明白了,总结一下:
在JDK7以前的版本就像Effective Java里说的那样,Comparator不强制要求实现等于,
在JDK7之后的版本由于排序改用了TimSort算法,导致Comparator必须实现等于.



<<Effective Java中文版>>里面有详细的解释,其实这是一个强烈建议,反例这样做其实破坏了equals和比较的传递性
和对称性

广告位

最新澳门博彩导航