[자바] 함수 정렬시 compareTo 함수 쓰는 이유(써야하는 이유)
프로그래밍/자바2021. 3. 18. 13:07
Arrays.sort(intervals, (i1, i2) -> i1[0]-i2[0]);
저는 정렬할 때 보통 람다식을 사용하여 위와 같이 Comparator를 구현합니다.
compareTo함수를 써도 되는 것은 알고 있지만 그냥 -를 사용하는게 더 짧아서 이걸 쓰는 게 습관이 됐습니다.
그런데 오늘 친구가 왜 compareTo를 써야하는지 아냐고 물어봤는데 대답하지 못했습니다.
그 친구가 알려주길 -로 비교를 하는 경우
Integer.MIN_VALUE 값과 1의 값을 비교하면 overflow(underflow) 문제가 생깁니다.
Integer.MIN_VALUE - 1 을 하게되면 Integer.MAX_VALUE가 되어서 잘못된 결과가 나옵니다.
그래서 Integer 클래스의 경우 compareTo를 어떻게 구현했나 찾아보니 아래처럼 ㅎㅎ 등호로 간단하게 구현되어 있습니다.
public int compareTo(Integer var1) {
return compare(this.value, var1.value);
}
public static int compare(int var0, int var1) {
return var0 < var1 ? -1 : (var0 == var1 ? 0 : 1);
}
댓글 영역