본문 바로가기
프로그래밍/Android-Java

[ANDROID] java.lang.IllegalArgumentException: Comparison method violates its general contract!

by 채연2 2020. 12. 4.

앱을 실행시켜놓고 아침에 와서 봤더니 다음과 같은 에러가 나고 제대로 실행이 안되고 있었다...

FATAL EXCEPTION: inference
java.lang.IllegalArgumentException: Comparison method violates its general contract!
       at java.util.TimSort.mergeLo(TimSort.java:777)
       at java.util.TimSort.mergeAt(TimSort.java:514)
       at java.util.TimSort.mergeCollapse(TimSort.java:441)
       at java.util.TimSort.sort(TimSort.java:245)
       at java.util.Arrays.sort(Arrays.java:1498)
       at java.util.ArrayList.sort(ArrayList.java:1470)
       at java.util.Collections.sort(Collections.java:201)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.os.HandlerThread.run(HandlerThread.java:65)

 

구글링을 해본 결과 Comparator Interface를 구현할 때 비교 방법을 명확하게 하지 않은 경우 발생하는 에러라고 한다.

그래서 내가 수정한 코드는 다음과 같다.

 

public static class Descending implements Comparator<Float> {
    @Override
    public int compare(Float o1, Float o2) {
        if (o1.equals(o2)) return 0;

        return o2.compareTo(o1);
    }
}

 

320x100

댓글