가장 기본이 되는 String, int 타입 배열의 오름차순과 내림차순에 대해 알아보자
String 타입 배열
오름차순
String[] arr = {"b", "d", "a", "c"};
Arrays.sort(arr);
System.out.print(Arrays.toString(arr));
// {"a", "b", "c", "d"}
내림차순
String[] arr = {"b", "d", "a", "c"};
Arrays.sort(arr, Collections.reversreOrder());
System.out.print(Arrays.toString(arr));
// {"d", "c", "b", "a"}
int 타입 배열
오름차순
int[] arr = {5, 2, 4, 3, 1};
Arrays.sort(arr);
System.out.print(Arrays.toString(arr));
// 1, 2, 3, 4, 5
내림차순
1.
int[] arr = {1, 5, 2, 4, 3};
Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(arr, Collections.reversOrder());
System.out.print(Arrays.toString(arr));
// 5, 4, 3, 2, 1
int 배열 -> Integer 배열로 boxing (Primitive 자료형 -> Wrapper 클래스)
Arrays.sort로 정렬
2.
arr = Arrays.stream(arr)
.boxed().sorted(Collections.reverseOrder());
.mapToInt(Integer::intValue).toArray();
2번과 같은 방법으로 한번에 int 배열을 Integer로 boxing (Primitive 자료형 -> Wrapper 클래스) 후 정렬한 다음 다시, int형 배열로 변경이 가능
그렇다면 왜 int 타입은 안되고 Integer 는 가능한가?
정답은 sort 메소드에 있다.
public static<T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegavyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
public static<T> void sort(T[] a, Comparator<?super T> c)
매개변수로 받아오는 c를 보면 Comparator<?super T> T는 제네릭 클래스로 어떠한 객체도 받아올 수 있다.
하지만, int는 primitive data type으로 허용이 불가능한 것이다.
728x90
'ssung_끄적끄적 > JAVA_끄적' 카테고리의 다른 글
특수문자 출력하기 ( 괄호, 백슬래시, 따옴표 등등) (0) | 2023.07.28 |
---|---|
소수 구하기 (0) | 2023.07.26 |
substring vs split 문자열 자르기 (0) | 2023.07.21 |
replace와 replaceAll (0) | 2023.06.21 |