배열의 정렬을 손쉽게 할 수 있는 방법에는 Arrays.sort가 있다.
- 오름차순 정렬은 다음과 같다.
private void arraySort(){
int[] arr = new int[]{5,3,1,4,2};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// [1,2,3,4,5]
}
arr 혹은 arr.toString() 출력 시 ⇒ [I@2133c8f8 (배열의 주소값이 출력)
Arrays.toString(arr) 출력 시 ⇒ [1, 2, 3 ,4 ,5] (배열 값 출력)
- 내림차순 정렬에는 Collections.reverseOrder() 를 사용하면 된다.
private void arraySort(){
int[] arr = new int[]{5,3,1,4,2};
Arrays.sort(arr, Collections.reverseOrder()); //Compile Error
System.out.println(Arrays.toString(arr));
// [1,2,3,4,5]
}
하지만 이렇게 사용하려고 하면 sort 부분에 빨간줄이 쳐지면서 int[] 부분에 문제가 있다고 알려준다.
Arrays.sort() 는
- sort(int[] a)
- sort(T[] a, Comparator <? super T> c)
처럼 사용할 수 있는데,
Comparator를 지정해주지 않으면 기본적으로 오름차순으로 정렬을 한다.
내림차순이나 다른 기준에 맞춰 정렬을 하고싶을 때는 Comparator를 정의해주어야 한다.
여기에서 T는 Generic Class를 의미한다.
int는 객체가 아닌 primitive type 이기에 Compile Error가 발생한다.
- 따라서 다음과 같이 바꾸어 준다면 내림차순 정렬이 가능하다.
private void arraySort(){
Integer[] arr = new Integer[]{5,3,1,4,2};
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr));
// [5,4,3,2,1]
}
- 혹은 다음과 같이 중간에 int[] → Integer[]로 변환하는 방법도 있다
private void arraySortReverse(){
int[] intArr = new int[]{5,3,1,4,2};
Integer[] integerArr = Arrays.stream(intArr).boxed().toArray(Integer[]::new);
Arrays.sort(integerArr, Collections.reverseOrder());
System.out.println(Arrays.toString(integerArr));
// [5,4,3,2,1]
}
'[Java] > 문법, 자료구조, 알고리즘' 카테고리의 다른 글
HashMap (0) | 2023.03.10 |
---|---|
소수 (에라토스테네스의 체) (0) | 2023.03.10 |
String 클래스 메소드 정리 (0) | 2023.03.06 |
StringBuilder, StringBuffer (0) | 2023.03.03 |
조합(Combination) (0) | 2023.02.24 |