배열 정렬
Java 에서 배열을 정렬하기 위해서는 Arrays.sort() 메서드를 사용합니다. 이 메서드를 통해 int 형 배열을 오름차순으로 정렬할 수 있습니다. 이때, 정렬된 배열은 새로 반환되는 것이 아니라, 원본 배열 자체가 정렬됩니다.
int[] arr = new int[]{34, 100, 50, 27};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); //[27, 34, 50, 100]
Arrays.sort() 메서드는 내부적으로 Dual-Pivot QuickSort 알고리즘을 사용하여 배열을 정렬합니다.
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
Arrays.sort() 메서드를 이용하여 배열의 지정된 범위 (fromIndex 부터 toIndex 전까지) 정렬할 수도 있습니다.
public static void sort(int[] a, int fromIndex, int toIndex)
내림차순 정렬
내림차순으로 정렬하기 위해서는 Compartor 객체를 Arrays.sort() 의 두번째 인자로 전달해야 합니다. 그러나 int 는 기본 타입 (primitive type) 이기 때문에, 이를 Integer 객체로 변환한 후 정렬해야 합니다.
public static <T> void sort(T[] a, Comparator<? super T> c) {...}
int[] arr = new int[]{34, 100, 50, 27};
Integer[] conv = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(conv, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println(Arrays.toString(conv)); // [100, 50, 34, 27]
또는 Collections.reverseOrder() 메서드를 사용하여 내림차순 정렬을 쉽게 구현할 수 있습니다.
Arrays.sort(conv, Collections.reverseOrder());
System.out.println(Arrays.toString(conv)); //[100, 50, 34, 27]
객체 배열 정렬
객체 배열을 정렬하려면 Comparable 또는 Comparator 인터페이스를 구현해야 합니다.
Comparable 인터페이스
객체의 기본 정렬 기준(natural ordering)에 따라 정렬됩니다. Comparable을 구현하지 않은 객체는 Arrays.sort()를 사용할 수 없습니다.
public static void sort(Object[] a) {...}
Comparator 인터페이스
Comparable이 구현되지 않았거나, 기본 정렬 기준 외에 다른 기준으로 정렬하고자 할 때 사용됩니다. 예를 들어, 내림차순 정렬을 구현하기 위해 Comparator 객체를 두 번째 인자로 전달합니다.
public static <T> void sort(T[] a, Comparator<? super T> c) {...}
정리하자면,
1. int 형 배열은 Arrays.sort() 메서드를 사용하여 오름차순으로 정렬할 수 있습니다.
2. int 형 배열을 내림차순으로 정렬하려면, 배열을 Integer 형 배열로 변환한 후 Arrays.sort() 의 두번째 인자로 Compartor 구현체를 전달해야 합니다.
3. 객체 배열은 Comparable 인터페이스를 궇녀한 객체의 natural ordering 에 따라 정렬됩니다.
4. Comparable 이 구현되지 않았거나 다른 기준으로 정렬하고자 하는 경우, Compartor 구현체를 사용하여 정렬합니다.
정렬과 관련된 포스팅
'Language > Java' 카테고리의 다른 글
[Java] 정렬 기준 Comparator과 Comparable 에 대해 알아보겠습니다. (0) | 2023.09.13 |
---|---|
[Java] Queue 인터페이스 (0) | 2023.07.05 |
[Java] Stack 클래스 (0) | 2023.07.05 |
[Java] Set 인터페이스 (0) | 2023.05.15 |
[Java] List<E> 인터페이스 (0) | 2023.05.15 |