안녕하세요.
Collections.sort()를 이용해 ArrayList를 정렬하고 있는데, 알 수 없는 오류가 발생해 질문 드립니다.
Collections.sort(userItemList, new Comparator<UserItem>() {
@Override
public int compare(UserItem lUserItem, UserItem rUserItem) {
if (checkSomething(lUserItem) && checkSomething(rUserItem)) {
return 0;
} else if (checkSomething(lUserItem) && !ischeckSomething(rUserItem)) {
return -1;
} else {
return 1;
}
}
});
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:862)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:479)
at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:418)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:218)
at java.util.Arrays.sort(Arrays.java:1246)
위의 Exception이 발생합니다.
구글링 해 보니 Java SDK7 부터 sorting 알고리즘이 변경되어 발생할 수 있다고 하는데,
이게 초반에 Item을 추가하면 문제 없는데.. 계속 추가하다보면 발생하게 되네요
혹시 원인 아시는 분 계신가요?