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. docker镜像push报错2. docker - 各位电脑上有多少个容器啊?容器一多,自己都搞混了,咋办呢?3. 为什么我ping不通我的docker容器呢???4. docker内创建jenkins访问另一个容器下的服务器问题5. 对html实现监测 发现不对6. dockerfile - 为什么docker容器启动不了?7. debian - docker依赖的aufs-tools源码哪里可以找到啊?8. nignx - docker内nginx 80端口被占用9. 关于docker下的nginx压力测试10. html5 - node静态资源服务器设置了Cache-Control,但浏览器从来不走304

网公网安备