설명
Array와 ArrayList를 정렬하는 법
https://rookie-programmer.tistory.com/52
오늘은 2차원 배열을 정렬하는 법에 대해서 설명하겠다.
2차원 배열은 1차원 배열이 여러 개 있는 형태로, 첫번째 []에는 행의 정보가, 두번째 []에는 열의 정보가 들어간다.
위 그림과 같이 3행 5열의 2차원 배열이 있을 경우 특정 배열 칸에 값을 넣거나 값을 가져올 때 a[행][열]로 접근하면 된다.
1차원 배열 정렬은 보통 Array.sort()로 간단하게 할 수 있지만 2차원 배열을 정렬하는 방법은 다소 복잡하다.
Comparator 익명클래스 구현하는 방법으로 compare() 메서드를 오버라이드하여 원하는 정렬 기준으로 정렬한다.
오름차순, 내림차순 외에 원하는 조건으로도 구현이 가능하다.
compare() 재정의
1. 특정 열 하나를 기준으로 정렬
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0]; // 0번째 열 기준 오름차순
//return o2[0]-o1[0]; // 0번째 열 기준 내림차순
//return o1[1]-o2[1]; // 1번째 열 기준 오름차순
//return o2[1]-o1[1]; // 1번째 열 기준 내림차순
}
});
결과
0번째 열(숫자들을) 기준으로 오름차순으로 정렬된 결과를 볼 수 있다.
return 문 다음 문장을 상황에 맞게 바꿔주면 1번째 열 기준, 내림차순 등으로 2차원 배열을 쉽게 정렬할 수 있다.
2. 특정 열 두 개를 기준으로 정렬(0번째 열 정렬 후 1번째 열 정렬)
0번째 열 기준으로 정렬 후 1번째 열 기준으로 정렬한다.
0번째 열 값의 의해서 정렬하고, 그 값이 같을 경우 1번째 열 값에 의해 정렬된다.
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {
return o1[1] - o2[1]; // 오름차순 o1[1] - o2[1] 내림차순 o2[1] - o1[1]
} else {
return o1[0] - o2[0];
}
}
});
if (o1[0] == o2[0]) : 0번째 열의 값이 같다면
return o1[1] - o2[1] : 다음 열인 1번째 열의 값으로 오름차순으로 정렬한다
else : 0번째 열의 값이 다르다면
return o1[0] - o2[0] : 0번째 열의 값을 기준으로 오름차순으로 정렬한다
결과
1. 특정 열 하나를 기준으로 정렬했을 때는 1 3 다음에 1 2가 나왔지만
이번 경우에는 0번째 열의 값이 같다면 1번째 열의 값으로 한 번 더 정렬되기 때문에 1 2 다음에 1 3이 정렬된 것을 확인할 수 있다.
compareTo() 재정의
https://rookie-programmer.tistory.com/85
7. 좌표 정렬 - 선생님 풀이 부분 + 알게된 점 2번 부분
'Language > JAVA' 카테고리의 다른 글
[JAVA] 자바 부분집합 구하기 이진트리 DFS (0) | 2023.03.13 |
---|---|
[JAVA] 자바 이진트리 순회 DFS(전위순회, 중위순회, 후위순회) (0) | 2023.03.13 |
[JAVA] 자바 HashMap 개념 및 주요 메서드 (0) | 2023.01.06 |
[JAVA] Array sort, ArrayList sort (배열 정렬, ArrayList sort 정렬) (0) | 2022.12.14 |
[JAVA] 배열 합치기 (0) | 2022.12.13 |