자바의 2차원 배열을 Arrays.sort() 를 통해 곧바로 정렬하려고 하면 java.lang.ClassCastException: I cannot be cast to java.lang.Comparable 오류가 발생한다. 오류 문구와 같이 비교 기준이 없어 캐스팅에 실패하기 때문이다.
예시와 같이 Comparable, Comparator 인터페이스를 구현하여 정렬 기준을 추가해줘야 한다.
1. 오름차순, 내림차순 정렬
int[][] arr = new int[][]{{1, -1}, {2, 2}, {3, 3}, {1, 2}, {0, 4}}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0]; // 첫번째 숫자 기준 오름차순 {0, 4}, {1, 2}, {1, -1}, {2, 2}, {3, 3}
return o2[0] - o1[0]; // 첫번째 숫자 기준 내림차순 {3, 3}, {2, 2}, {1, 2}, {1, -1}, {0, 4}
return o1[1] - o2[1]; // 두번째 숫자 기준 오름차순 {1, -1}, {2, 2}, {1, 2}, {3, 3}, {0, 4}
return o2[1] - o1[1]; // 두번째 숫자 기준 내림차순 {0, 4}, {3, 3}, {1, 2}, {2, 2}, {1, -1}
}
});
2. 다중 조건 정렬
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1]) { // 두번째 숫자가 같으면
return o1[0] - o2[0]; // 첫번째 숫자가 증가하는 순서로,
} else { // 그렇지 않으면
return o1[1] - o2[1]; // 두번째 숫자가 증가하는 순서로 정렬한다.
} // {1, -1}, {1, 2}, {2, 2}, {3, 3}, {0, 4}
}
});
'Java' 카테고리의 다른 글
[JAVA] 자바 가상머신 JVM(Java Virtual Machine) 이란? (3) | 2023.03.25 |
---|---|
자바 [JAVA] - Interface와 Class (4) | 2023.03.23 |
자바 - 날짜와 시간 (0) | 2023.02.20 |
자바 - 객체지향퀴즈 (0) | 2023.02.20 |
자바 - 인터페이스 (0) | 2023.02.20 |
댓글