전공공부/JAVA

Arrays.sort() 오름차순 내림차순

프로호구래머 2020. 10. 12. 16:53

Java에서 정렬을 손쉽게 하게 해주는 클래스가 두 가지 있다.

Arrays.sort와 Collections.sort

그 중 오늘은 java.util.Arrays 의 정렬에 관해 정리해 보려고 한다.

 

Arrays.sort는 배열을 정렬하기 위해 사용한다.

 

Arrays.sort는 굉장히 많이 존재하지만,

오늘 우리가 사용할 Arrays.sort는

1) sort(int[] a)

2) sort(T[] a, Comparator <? super T> c)

이다.

 

1번 처럼 Comparator를 지정해 주지 않으면 기본적으로 오름차순으로 정렬을 해준다.

하지만, 정렬을 오름차순이 아닌 내림차순이나 각자의 기준에 맞춰 정렬하고 싶을 때도 있을 것이다.

그럴 때는 2번 처럼 Comparator를 정의 해주어야 한다.

 

해당 글에서는 오름차순과 내림차순에 대해서만 포스팅을 해보려 한다.

 

그럼 같이 코드를 한 번 보자.

 

우선, 오름차순이다.

int[] nums = {10, 4, 8, 6};
		
Arrays.sort(nums);

결과 : [4, 6, 8, 10]

 

sort는 기본적으로 오름차순으로 해주기 때문에 Comparator 지정 없이 간단하게 정렬이 가능하다.

 

다음, 내림차순이다.

 

우리는 내림차순을 하기 위해서는 Comparator를 직접 정의 할 수도 있겠지만,

java.util.Collections에서 제공해주는 Collections.reverseOrder()를 이용하여 내림차순을 위한 Comparator를 손쉽게 만들 수 있다.

int[] nums = {10, 4, 8, 6};
		
Arrays.sort(nums, Collections.reverseOrder());

하지만, 해당 코드를 작성해보면 다음과 같은 컴파일 오류가 발생한다.

 

The method sort(int[]) in the type Arrays is not applicable for the arguments (int[], Collections.reverseOrder())

 

오류에서는 Comparator를 적용할 수 있는 메소드가 없다는 듯이 말하고 있다.

하지만, Arrays에서는 sort(T[] a, Comparator <? super T> c) method를 제공해 주는데 왜 안되나 고민해 보았다.

 

사실 sort(T[] a, Comparator <? super T> c) 에서 사용되는 T는 Generic Class로 어떠한 객체도 허용하게 해주었지만, int는 객체가 아닌 primitive type이었던 것이다.

그래서 해당 코드를 int[]가 아닌 Integer[]로 변경 해주면 컴파일 에러 없이 내림차순이 올바르게 된다.

Integer[] nums = {10, 4, 8, 6};
		
Arrays.sort(nums, Collections.reverseOrder());

결과: [10, 8, 6, 4]


출처

docs.oracle.com/javase/7/docs/api/

 

Java Platform SE 7

 

docs.oracle.com