Exception in thread "main" java.lang.IllegalArgumentException:
Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeLo(ComparableTimSort.java:744)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:481)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:406)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:213)
at java.util.Arrays.sort(Arrays.java:1246)
at Solution.main(Solution.java:16)
This is the exception I get when running my program. Error occurs when I am using Arrays.sort
function on an array of objects of class Element
described as
static class Element implements Comparable<Element> {
int pos,val;
Element(int pos,int val){
this.pos=pos;
this.val=val;
}
public int compareTo(Element a){
if(val!=a.val)
return val-a.val;
return pos-a.pos;
}
}
It runs perfectly fine in some cases but throws the above error in other cases. What is the error in my program? Why is my comparison method violating its general contract?