JAVA로 프로그래밍을 하다 보면 배열이나 리스트를 정렬해야 될 때가 있습니다.
1차원 배열은 간단히 sort() 메서드를 사용하여 간편하게 정렬할 수 있지만 2차원 배열을 정렬하기 위해서는 다른 방법이 필요합니다.
이번 포스팅에서는 이 "다른 방법"에 대해서 살펴보겠습니다.
1차원 배열의 정렬
오름차순 정렬
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 1, 2};
// 오름차순 정렬
Arrays.sort(arr); // 기본 정렬은 오름차순
System.out.println("오름차순 정렬: " + Arrays.toString(arr));
}
}
먼저, 두 숫자를 오름차순으로 정렬하는 방법을 살펴보겠습니다. 오름차순 정렬은 작은 값이 앞에 오고 큰 값이 뒤에 오는 순서로 정렬하는 것입니다.
내림차순 정렬
import java.util.Arrays;
import java.util.Collections;
public class SortExample {
public static void main(String[] args) {
Integer[] arr = {5, 3, 8, 1, 2};
// 내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());
System.out.println("내림차순 정렬: " + Arrays.toString(arr));
}
}
두 숫자를 내림차순으로 정렬하는 방법입니다. 내림차순 정렬은 큰 값이 앞에 오고 작은 값이 뒤에 오는 순서로 정렬하는 것입니다.
2차원 배열의 정렬
2차원 배열은 행(row)과 열(column)로 구성되어 있으며, 각 요소는 배열 내 위치에 따라 인덱스로 접근할 수 있습니다. 이를 이용해 특정 기준에 따라 배열을 정렬할 수 있습니다.
이중 배열을 정렬하고 싶은 경우 Comparator를 쓰거나 람다식(Lamda)을 쓰면 됩니다.
오름차순 정렬
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
int[][] arr = {{3, 4}, {1, 2}, {5, 1}};
// 오름차순 정렬 (첫 번째 열 기준)
Arrays.sort(arr, (a, b) -> a[0] - b[0]);
System.out.println("오름차순 정렬: " + Arrays.deepToString(arr));
}
}
"(a, b) -> a - b"를 사용하면 오름차순으로 정렬할 수 있습니다. 이는 배열이나 리스트에서 사용될 수 있습니다.
(a, b) -> a - b는 Comparator의 compare 메서드를 오버라이딩하는 역할을 합니다.
이는 a가 b보다 작으면 음수를 반환하여 a가 b 앞에 오도록 정렬하게 됩니다.
내림차순 정렬
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
int[][] arr = {{3, 4}, {1, 2}, {5, 1}};
// 내림차순 정렬 (첫 번째 열 기준)
Arrays.sort(arr, (a, b) -> b[0] - a[0]);
System.out.println("내림차순 정렬: " + Arrays.deepToString(arr));
}
}
"(a, b) -> b - a" 를 사용하면 내림차순으로 정렬할 수 있습니다.
(a, b) -> b - a는 b가 a보다 크면 양수를 반환하여 b가 a 앞에 오도록 정렬하게 됩니다.
다중 정렬
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
int[][] arr = {{3, 4}, {1, 2}, {5, 1}, {3, 2}};
// 다중 기준 정렬: 첫 번째 열 오름차순, 첫 번째 열이 동일하면 두 번째 열 오름차순
Arrays.sort(arr, (a, b) -> {
if (a[0] == b[0]) {
return a[1] - b[1];
} else {
return a[0] - b[0];
}
});
System.out.println("다중 기준 정렬: " + Arrays.deepToString(arr));
}
}
때로는 여러 기준에 따라 정렬을 해야 할 때가 있습니다.
다음 예제는 첫 번째 열을 오름차순으로 정렬하되, 첫 번째 열의 값이 같으면 두 번째 열을 내림차순으로 정렬하는 예제입니다.
Comparator 또는 람다 표현식에서 (a, b)는 두 요소를 비교할 때 사용되며, 첫 번째 요소 a가 두 번째 요소 b보다 작을 때는 음수를 반환하여 a가 b보다 앞에 오도록 정렬하게 됩니다. 이는 오름차순으로 정렬하는 방식입니다.
- (첫 번째 요소, 두 번째 요소) 일 때, "첫 번째 요소 - 두 번째 요소" ➡️ 오름차순
- (첫 번째 요소, 두 번째 요소) 일 때, "두 번째 요소 - 첫 번째 요소" ➡️ 내림차순
람다 정렬의 장점
- 간결함
- 람다 표현식을 사용하면 코드가 매우 간결해집니다.
- 기존의 Comparator 인터페이스를 익명 클래스 방식으로 구현하던 방식보다 훨씬 짧고 읽기 쉽습니다.
- 가독성
- 람다 표현식을 사용하면 정렬 기준이 명확히 드러나기 때문에 가독성이 높아집니다.
- 유연성
- 다양한 정렬 기준을 쉽게 적용할 수 있습니다. 예를 들어, 다중 기준 정렬도 간단하게 구현할 수 있습니다.
'Language > Java' 카테고리의 다른 글
[JAVA] Exception vs RuntimeException: 커스텀 예외에서 RuntimeException을 선택하는 이유 (0) | 2024.09.23 |
---|---|
[JAVA] Lombok이란 무엇일까❓(lombok 설치 방법, lombok사용법) (0) | 2024.07.20 |
[JAVA] 좌표와 2차원 배열 매핑의 이해 (좌표 ➡️ 배열) (0) | 2024.07.01 |
[Java] copyOf(), arraycopy(), copyOfRange() 메서드 알아보기 ✔ (배열 복사 메서드) (0) | 2024.06.16 |
[Java] toBinaryString(), toHexString(), toOctalString() , parseInt() 알아보기 (n진법 변환) (1) | 2024.06.09 |