반응형
Python의 경우 sort()함수를 사용하여 손쉽게 리스트들을 정렬했었다. 요즘은 Python말고 Java로 알고리즘 문제들을 풀어보고 있는데 Java에도 sort()와 같은 함수로 쉽게 정렬을 해주는 메서드가 있지 않을까 검색을 해보니 Arrays.sort()를 찾을 수 있었다.
사용 예제 코드
int[][] arr = new int[3][2];
arr[0][0] = 1;
arr[0][1] = 10;
arr[1][0] = 5;
arr[1][1] = 5;
arr[2][0] = 3;
arr[2][1] = 1;
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] t1, int[] t2) {
return t1[0] - t2[0];
}
});
/**
* 정렬 후 arr
* 1 10
* 3 1
* 5 5
*/
- 위의 코드는 arr이라는 2차원 배열의 [0]번 인덱스 값을 기준으로 오름차순 정렬을 하는 코드이다.
- 내림차순을 하고 싶다면 return 값에서
t2[0] - t1[0]
을 해주면 된다.
if 비교하는 인덱스의 값은 같고 다른 인덱스를 기준으로도 정렬을 해야한다면?
Arrays.sort()는 앞에 정렬을 하고자하는 Object가 오면 뒤에 인자에 정렬기준을 만들어주어야 한다. 위에서는 Comparator를 사용하여 compare를 오버라이딩하여 정렬기준을 만들어주었다. 그렇다면 이번 부제목에 해당하는 것도 이 정렬기준을 잘만 만들어준다면 가능하다.
/**
* 정렬 전 arr
* 4 10
* 4 5
* 5 7
* 3 1
* 5 5
*/
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] t1, int[] t2) {
if (t1[0] == t2[0])
return t1[1] - t2[1]; // 0번째 인덱스가 같다면 1번째 인덱스를 비교한 값을 return
else
return t1[0] - t2[0];
}
});
/**
* 정렬 전 arr
* 3 1
* 4 5
* 4 10
* 5 5
* 5 7
*/
t1[0] == t2[0]
일때 [1]의 인덱스 값들을 비교하여 return값을 주는 방법으로 앞의 값이 같을때는 뒤의 값으로 정렬을 할 수 있다.위와 같이
Comparator<T[]>
를 사용하여 compare메서드를 오버라이딩 할 수도 있지만 아래와 같이 람다와 Integer에 정의되어있는 compare를 사용해서도 위와 같이 정렬을 할 수 있다.Arrays.sort(meeting, (t1,t2) -> { if (t1[1] == t2[1]) { return Integer.compare(t1[0], t2[0]); } else { return Integer.compare(t1[1], t2[1]); } });
반응형
'Programming > Java' 카테고리의 다른 글
[자바 프로그래밍] Lesson4 클래스 메소드와 필드 (0) | 2020.08.30 |
---|---|
[자바 프로그래밍] Lesson3 문자열과 패키지 (0) | 2020.08.29 |
[자바 프로그래밍] Lesson2 자바의 기초 (0) | 2020.08.17 |
[자바 프로그래밍] Lesson1 시작하기 (0) | 2020.08.16 |
[JAVA] Lombok이란? (0) | 2020.08.11 |