[Java] 정렬 라이브러리, 오름차순 정렬, 내림차순 정렬
Java 정렬 라이브러리를 사용해보자.
Arrays.sort()
일반적으로 정렬은 배열이나 리스트에서 많이 쓰인다.
int 배열에서 정렬 라이브러리를 사용해보자.
import java.util.*;
class Exam {
public static void main(String[] args) {
int[] arr = {2, 5, 1, 4, 3};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
결과를 출력하면 다음과 같이 오름차순 정렬된 결과를 확인할 수 있다.
결과
[1, 2, 3, 4, 5]
일반 자료형 배열의 내림차순 정렬
이제 int [] 배열의 내림차순 정렬하는 방법을 보려고 한다.
일반적으로 사용하는 int [] 배열은 내림차순 라이브러리를 적용할 수 없다.
따라서 Swap을 통해 오름차순 정렬된 배열을 내림차순 배열로 바꿔줄 수 있다.
먼저 오름차순을 적용한 뒤 배열의 시작과 끝을 중간 인덱스까지 Swap 한다.
Arrays.sort(arr); // 정렬
// reverse
for(int i = 0; i < arr.length / 2; i++ ) {
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
출력하면 [5, 4, 3, 2, 1] 로 내림차순 정렬된 것을 확인할 수 있다.
다음은 내림차순 정렬을 할 때 라이브러리를 사용할 수 있는 상황을 확인하자.
일반적으로 사용되는 int 자료형 배열은 내림차순 정렬 라이브러리를 사용할 수 없었지만,
객체 자료형 Integer 배열 대상으로는 내림차순 정렬을 할 수 있다.
Arrays.sort() 정렬 함수에 Collections.reverseOrder() 파라미터를 함께 넣어준다.
Integer 객체 배열에 내림차순으로 정렬한다는 것이다.
결과를 출력하면 객체 배열이 내림차순으로 정렬된 것을 확인할 수 있다.
일반적인 자료형(int, Integer)의 배열이 아닌,
커스텀 클래스 객체 리스트를 정렬하는 방법을 알아보자.
커스텀 클래스 객체 리스트 정렬
위 예제와 같이 int만 저장하는 배열에서 정렬은 Arrays.sort() 로 가능했다.
그런데 커스텀 클래스 예를 들면 '학생의 점수로 정렬'을 한다고 했을 때의 정렬하는 방법을 보자.
여기선 Arrays.sort() 를 사용할 수 없다.
Strudent 클래스를 준비한다.
class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
List에 Student 객체를 저장해두고,
리스트에서 Student의 Score를 기준으로 오름차순으로 정렬하는 코드를 보자.
list.sort(Comparator.comparingInt(Student::getScore));
list 자체 내장 메서드 sort() 를 call 하여 정렬을 하는데,
Comparator.comparingInt 메서드를 사용하여 Student 객체의 getScore() 메서드 기준으로 정렬한다.
Comparator.comparingInt 메서드는 int 값을 비교할 때 유용하게 사용된다.
내림차순으로 정렬하고 싶다면 Comparator.reversed() 메서드를 사용할 수 있다.
list.sort(Comparator.comparingInt(Student::getScore).reversed());
'Algorithm' 카테고리의 다른 글
[Java] 백준 문제 2675 문자열 반복 (0) | 2022.06.02 |
---|---|
[Java] 백준 문제 10809 알파벳 찾기 (0) | 2022.05.27 |
[Java] 백준 문제 11720 숫자의 합 (0) | 2022.05.12 |
[Java] 백준 문제 11654 아스키 코드 (0) | 2022.05.11 |
[JAVA] 백준 문제 1065 - 한수 (1) | 2022.04.28 |