java.lang.IllegalArgumentException:比較方法違反了它的一般約定。
您的compare()方法 。如果A == B和B == C,則A必須等于C。
現(xiàn)在考慮這種情況:
對于A,B和C,假設containsKey()方法返回以下結果:
childMap.containsKey(A.getID()) 退貨 truechildMap.containsKey(B.getID()) 退貨 falsechildMap.containsKey(C.getID()) 退貨 true另外,考慮訂購A.getId()!= B.getId()。
所以,
A并B返回0,因為外部if條件為false=>A == BB并C返回0,因為外部if條件為false=>B == C但是,A和C可以根據(jù)塊內(nèi)的測試返回-1或。因此,。這違反了傳遞原則。1``if``A != C
我認為,您應該在else塊內(nèi)添加一些條件,該條件類似于塊內(nèi)的執(zhí)行檢查if。
解決方法您好,以下是我的比較器的比較方法。我不確定是什么問題。我在堆棧溢出時查找了其他類似標題的問題和答案,但不確定我的方法有什么問題,但我一直在獲取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)
相關文章:
1. windows誤人子弟啊2. php傳對應的id值為什么傳不了啊有木有大神會的看我下方截圖3. 如何用筆記本上的apache做微信開發(fā)的服務器4. python - linux 下用wsgifunc 運行web.py該如何修改代碼5. 關于mysql聯(lián)合查詢一對多的顯示結果問題6. 實現(xiàn)bing搜索工具urlAPI提交7. 冒昧問一下,我這php代碼哪里出錯了???8. mysql優(yōu)化 - MySQL如何為配置表建立索引?9. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)10. 數(shù)據(jù)庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。
