728x90
개요
자바에서 정렬을 구현할 때 흔히 두 가지 방법을 사용합니다.
- 뺄셈(-) 연산자를 사용하는 방법
- Integer.compare()를 사용하는 방법
본 글에서는 각각의 장단점과 주의해야 할 점을 살펴보겠습니다.
뺄셈(-) 연산자 사용
// 뺄셈을 사용한 정렬
Arrays.sort(arr, (a, b) -> a - b);
// 다중 조건 정렬의 경우
Arrays.sort(arr, (a, b) -> {
if (a[0] == b[0]) {
return a[1] - b[1];
}
return a[0] - b[0];
});
장점
- 코드가 간결함
- 직관적으로 이해하기 쉬움
- 작은 수의 범위에서는 문제없이 작동
단점
- 정수 오버플로우 위험이 있음
- 큰 수를 다룰 때 예상치 못한 결과가 발생할 수 있음
Integer.compare() 사용
// Integer.compare()를 사용한 정렬
Arrays.sort(arr, (a, b) -> Integer.compare(a, b));
// 다중 조건 정렬의 경우
Arrays.sort(arr, (a, b) -> {
if (a[0] == b[0]) {
return Integer.compare(a[1], b[1]);
}
return Integer.compare(a[0], b[0]);
});
장점
오버플로우 걱정 없음- 안전하고 reliable한 비교 가능
- 표준 라이브러리 메서드 사용으로 신뢰성 높음
단점
- 코드가 약간 더 길어짐
- 성능상 미세한 차이가 있을 수 있음 (실제로는 무시할만한 수준)
뺄셈(-) vs Integer.compare()
- 일반적인 상황
- 작은 범위의 수를 다룰 때는 두 방법 모두 문제없이 작동
- 코드의 간결성을 위해 뺄셈을 사용해도 큰 문제 없음
- 프로덕션 환경
- 안전성이 중요한 프로덕션 코드에서는 Integer.compare() 사용 권장
- 예상치 못한 입력값에 대한 방어적 프로그래밍 가능
- 권장사항
- 일반적으로 Integer.compare() 사용을 권장
- 특히 입력값의 범위를 확실히 알 수 없는 경우에는 반드시 Integer.compare() 사용
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.12.19 - 바이토닉 수열(Bitonic Sequence)이란❓ (0) | 2024.12.19 |
---|---|
[TIL, 일일 회고] 2024.12.18 - Integer.compare와 정렬 원리 톺아보기 (0) | 2024.12.18 |
[백준, 1966번] 프린터 큐 (Queue 큐, PriorityQueue 우선순위 큐, Java) (0) | 2024.12.16 |
[TIL, 일일 회고] 2024.12.15 - Docker ID 축약 기능 알아보기 (0) | 2024.12.15 |
[TIL, 일일 회고] 2024.12.14 - EXPOSE와 -p 옵션의 실제 포트 연결 차이 확인해보기 (0) | 2024.12.14 |