ssung_끄적끄적/JAVA_끄적

배열의 오름차순, 내림차순

ssungcohol 2023. 8. 18. 17:24

가장 기본이 되는 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