国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

阿里巴巴Java開發(fā)手冊(cè)——Comparator

瀏覽:120日期:2023-11-18 18:43:32

問題描述

阿里巴巴Java開發(fā)手冊(cè)——Comparator

上圖是《阿里巴巴Java開發(fā)手冊(cè)v1.2.0》中的說明,這里舉了個(gè)反例,說沒有處理相等的情況,但我想:

o1.getId() > o2.getId()

反過來不就是

o1.getId() <= o2.getId()

我平時(shí)都是這樣用的,求大神在幫忙解釋一下這個(gè)地方的技巧是什么?是什么原因?

問題解答

回答1:

進(jìn)一步了解了一下,問題的根本原因是JDK7的排序?qū)崿F(xiàn)改為了TimSort,詳細(xì)見這篇文章。http://blog.2baxb.me/archives...

一開始回答的時(shí)候并沒有完全理解作者問問題的意圖,回答得有點(diǎn)草率,為此道個(gè)歉。分割線下是之前回答的內(nèi)容,因?yàn)榇鸢冈u(píng)論里有和@wanghaa 就舊有答案的討論,因此保留,也謝謝@wanghaa 讓我意識(shí)到問題。

public static void main(String[] args) { int i = 1; int j = 1; int ret = i > j ? 1 : -1; System.out.println(ret);}

上面的代碼會(huì)輸出-1,進(jìn)行比較的兩個(gè)取值相等的情況下應(yīng)該返回0,返回-1肯定是不對(duì)的,所以一定要單獨(dú)處理相等的情況。

回答2:

應(yīng)該要判斷等于0 的情況

回答3:

經(jīng)過@gemoji的討論終于明白了,總結(jié)一下:在JDK7以前的版本就像Effective Java里說的那樣,Comparator不強(qiáng)制要求實(shí)現(xiàn)等于,在JDK7之后的版本由于排序改用了TimSort算法,導(dǎo)致Comparator必須實(shí)現(xiàn)等于.

阿里巴巴Java開發(fā)手冊(cè)——Comparator阿里巴巴Java開發(fā)手冊(cè)——Comparator

<<Effective Java中文版>>里面有詳細(xì)的解釋,其實(shí)這是一個(gè)強(qiáng)烈建議,反例這樣做其實(shí)破壞了equals和比較的傳遞性和對(duì)稱性

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 宜都市| 石景山区| 怀仁县| 安新县| 芜湖市| 东安县| 茌平县| 客服| 新竹市| 当雄县| 连江县| 楚雄市| 邮箱| 甘谷县| 巨野县| 河南省| 右玉县| 喀喇沁旗| 宝丰县| 华安县| 无锡市| 西乌珠穆沁旗| 汉沽区| 民丰县| 六枝特区| 淅川县| 鄂托克前旗| 太原市| 华亭县| 乐亭县| 莒南县| 张家港市| 城固县| 乾安县| 梁山县| 九江县| 富顺县| 光山县| 化德县| 松潘县| 横峰县|