728x90
Integer.compare 톺아보기
기본적으로 Arrays.sort()는 오름차순으로 정렬됩니다. 그리고 양수가 반환되면, 비교된 두 값의 순서가 뒤로 간다는 의미입니다.
Arrays.sort()의 기본 동작
- Arrays.sort()는 기본적으로 오름차순으로 정렬됩니다.
- 두 값을 비교할 때, compare() 메서드가 음수, 0, 양수를 반환하는 방식에 따라 순서를 결정합니다.
Integer.compare(a, b)의 반환 값
- 음수(a < b)가 반환
- a는 b보다 앞에 오도록 정렬됩니다.
- 0(a == b)이 반환
- a와 b의
순서는 변경되지 않습니다.
- a와 b의
- 양수(a > b)가 반환
- a는 b보다 뒤에 오도록 정렬됩니다.
따라서, 양수가 반환되면 a가 b보다 뒤로 가는 것이고, 기본적으로 오름차순 정렬이기 때문에, 큰 값은 뒤로 가게 됩니다.
핵심은 반환 값에 따라서 정렬의 순서가 결정되는 것입니다.
compare의 반환 규칙
람다식에서 정렬 방향을 결정하는 것은 compare 메서드의 반환값인데, 기본적인 규칙은 다음과 같습니다.
1. 양수 반환
- 두 요소의 위치를 바꿈
2. 음수 반환
- 현재 순서를 유지
3. 0 반환
- 동일한 값으로 판단
Ex)
import java.util.Arrays;
public class CompareExample {
public static void main(String[] args) {
Integer[] arr = {5, 2, 9, 1, 3};
// 1. 기본 오름차순 정렬
Integer[] arr1 = arr.clone();
Arrays.sort(arr1);
System.out.println("기본 오름차순 정렬: " + Arrays.toString(arr1));
// 2. Integer.compare(a, b)를 사용한 오름차순 정렬
Integer[] arr2 = arr.clone();
Arrays.sort(arr2, (a, b) -> Integer.compare(a, b));
System.out.println("Integer.compare(a, b) 오름차순 정렬: " + Arrays.toString(arr2));
// 3. Integer.compare(b, a)를 사용한 내림차순 정렬
Integer[] arr3 = arr.clone();
Arrays.sort(arr3, (a, b) -> Integer.compare(b, a));
System.out.println("Integer.compare(b, a) 내림차순 정렬: " + Arrays.toString(arr3));
// 4. Integer.compare(a, b)로 특정 조건에 따라 다르게 정렬
Integer[] arr4 = arr.clone();
Arrays.sort(arr4, (a, b) -> {
// 예시: 짝수 먼저 정렬하고 홀수 나중에 정렬
if (a % 2 == 0 && b % 2 != 0) {
return -1; // a가 먼저 오게
} else if (a % 2 != 0 && b % 2 == 0) {
return 1; // b가 먼저 오게
} else {
return Integer.compare(a, b); // 기본 오름차순
}
});
System.out.println("짝수 먼저 정렬 후 나머지 오름차순: " + Arrays.toString(arr4));
}
}
출력 결과
기본 오름차순 정렬: [1, 2, 3, 5, 9]
Integer.compare(a, b) 오름차순 정렬: [1, 2, 3, 5, 9]
Integer.compare(b, a) 내림차순 정렬: [9, 5, 3, 2, 1]
짝수 먼저 정렬 후 나머지 오름차순: [2, 8, 6, 1, 3]
- return 1;의 의미 (양수)
- 비교 함수에서 return 1;은 a와 b를 비교했을 때 a > b일 때와 같은 효과를 주는 것입니다.
- 이 경우, a가 b보다 크다는 의미이기 때문에, b가 a보다 먼저 오도록 배열을 정렬하게 됩니다.
- retruen -1의 의미 (음수)
- a가 b보다 작다는 것을 나타내는 값입니다.
- 즉, a가 b보다 먼저 오도록 정렬되게 만듭니다.
- 따라서 return -1;은 a가 b보다 작을 때 a를 먼저 오게 하려는 의도로 사용됩니다.
정렬 함수에서 (a, b)를 비교할 때, 첫 번째 변수인 a와 두 번째 변수인 b를 기준으로 반환값이 음수이면 a가 b보다 앞에 오고, 양수이면 a가 b 보다 뒤에 옵니다. 기본적으로 Arrays.sort() 는 오름차순 정렬을 합니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.12.20 - Java의 다양한 배열 복사 방법 (clone(), System.arraycopy(), Arrays.copyOf()) (0) | 2024.12.20 |
---|---|
[TIL, 일일 회고] 2024.12.19 - 바이토닉 수열(Bitonic Sequence)이란❓ (0) | 2024.12.19 |
[TIL, 일일 회고] 2024.12.17 - 자바 정렬 방법 비교: 뺄셈 연산자 vs Integer.compare() (0) | 2024.12.17 |
[백준, 1966번] 프린터 큐 (Queue 큐, PriorityQueue 우선순위 큐, Java) (0) | 2024.12.16 |
[TIL, 일일 회고] 2024.12.15 - Docker ID 축약 기능 알아보기 (0) | 2024.12.15 |