java.lang.IllegalArgumentException:比較方法違反了它的一般約定。
您的compare()方法 。如果A == B和B == C,則A必須等于C。
現(xiàn)在考慮這種情況:
對(duì)于A,B和C,假設(shè)containsKey()方法返回以下結(jié)果:
childMap.containsKey(A.getID()) 退貨 truechildMap.containsKey(B.getID()) 退貨 falsechildMap.containsKey(C.getID()) 退貨 true另外,考慮訂購(gòu)A.getId()!= B.getId()。
所以,
A并B返回0,因?yàn)橥獠縤f條件為false=>A == BB并C返回0,因?yàn)橥獠縤f條件為false=>B == C但是,A和C可以根據(jù)塊內(nèi)的測(cè)試返回-1或。因此,。這違反了傳遞原則。1``if``A != C
我認(rèn)為,您應(yīng)該在else塊內(nèi)添加一些條件,該條件類似于塊內(nèi)的執(zhí)行檢查if。
解決方法您好,以下是我的比較器的比較方法。我不確定是什么問(wèn)題。我在堆棧溢出時(shí)查找了其他類似標(biāo)題的問(wèn)題和答案,但不確定我的方法有什么問(wèn)題,但我一直在獲取java.lang.IllegalArgumentException:比較方法違反了它的一般約定!
任何幫助將不勝感激
public int compare(Node o1,Node o2){ HashMap<Integer,Integer> childMap = orderMap.get(parentID); if(childMap != null && childMap.containsKey(o1.getID()) && childMap.containsKey(o2.getID())) {int order1 = childMap.get(o1.getID());int order2 = childMap.get(o2.getID());if(order1<order2) return -1;else if(order1>order2) return 1;else return 0; } elsereturn 0;}
添加我得到的異常
java.lang.IllegalArgumentException: Comparison method violates its general contract!at java.util.TimSort.mergeLo(TimSort.java:747)at java.util.TimSort.mergeAt(TimSort.java:483)at java.util.TimSort.mergeCollapse(TimSort.java:410)at java.util.TimSort.sort(TimSort.java:214)at java.util.TimSort.sort(TimSort.java:173)at java.util.Arrays.sort(Arrays.java:659)at java.util.Collections.sort(Collections.java:217)
相關(guān)文章:
1. javascript - 按鈕鏈接到另一個(gè)網(wǎng)址 怎么通過(guò)百度統(tǒng)計(jì)計(jì)算按鈕的點(diǎn)擊數(shù)量2. sql語(yǔ)句 - 如何在mysql中批量添加用戶?3. mysql 可以從 TCP 連接但是不能從 socket 鏈接4. mysql - PHP定時(shí)通知、按時(shí)發(fā)布怎么做?5. 怎么php怎么通過(guò)數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。6. mysql - JAVA怎么實(shí)現(xiàn)一個(gè)DAO同時(shí)實(shí)現(xiàn)查詢兩個(gè)實(shí)體類的結(jié)果集7. 事務(wù) - mysql共享鎖lock in share mode的實(shí)際使用場(chǎng)景8. mysql建表索引問(wèn)題求助9. mysql - 數(shù)據(jù)庫(kù)建字段,默認(rèn)值空和empty string有什么區(qū)別 11010. mysql 非主鍵做范圍查找實(shí)現(xiàn)原理的一點(diǎn)困惑
