java.lang.IllegalArgumentException:比较方法违反了它的一般约定。
您的compare()方法 。如果A == B和B == C,则A必须等于C。
现在考虑这种情况:
对于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可以根据块内的测试返回-1或。因此,。这违反了传递原则。1``if``A != C
我认为,您应该在else块内添加一些条件,该条件类似于块内的执行检查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. thinkphp6中怎么把类放到容器中?2. javascript - 呈现引擎是什么?3. 闯关的第二个问题的答案是错的吧?4. javascript - js 在一段文字中的括号前面插入一个换行/5. 请教使用PDO连接MSSQL数据库插入是乱码问题?6. javascript - 小白求解,请问这个dom对象的为什么能用jquery方法?7. html5 - canvas中的mousedrag事件,为什么鼠标拖出canvas,然后再次移入canvas,drag事件还触发8. php - mysql多表查询9. python - pymongo复制数据库中的表10. python - 如何用pandas处理分钟数据变成小时线?

网公网安备