Java의 Arrays.sort와 Comparator를 사용한 커스텀 정렬

coldrice99·2024년 9월 2일
0

오늘은 Java에서 배열을 정렬할 때 유용하게 사용되는 Arrays.sort와 이를 활용한 커스텀 정렬 방법에 대해 알아보겠다. 기본적인 오름차순 정렬은 자주 사용되지만, 특정 조건에 맞춰 배열을 정렬해야 하는 경우가 생기기 마련이다. 이럴 때 Comparator 인터페이스를 활용하면 원하는 기준으로 배열을 정렬할 수 있다.

Arrays.sort 기본 사용법

먼저, Arrays.sort의 기본 사용법에 대해 알아보겠다. 이 메서드는 배열을 오름차순으로 정렬하는데, 기본 데이터 타입과 객체 배열에 모두 사용할 수 있다.

기본 데이터 타입 배열 정렬

가장 간단한 형태로 Arrays.sort를 사용하는 방법은 다음과 같다.

int[] numbers = {5, 3, 8, 1, 2};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));  // [1, 2, 3, 5, 8]

위 코드에서는 numbers 배열이 오름차순으로 정렬되었다. 기본 데이터 타입 배열은 자동으로 작은 값부터 큰 값으로 정렬된다.

객체 배열 정렬

객체 배열의 경우에도 Arrays.sort를 통해 정렬할 수 있다. 예를 들어, 문자열 배열을 정렬하면 다음과 같이 된다.

String[] words = {"banana", "apple", "grape", "orange"};
Arrays.sort(words);
System.out.println(Arrays.toString(words));  // [apple, banana, grape, orange]

이 코드에서는 문자열 배열이 알파벳 순서대로 정렬된다. 기본적으로 객체 배열은 사전순으로 정렬된다.

커스텀 정렬: Comparator 사용

기본 정렬 외에, 특정한 기준에 맞춰 배열을 정렬해야 할 때가 있다. 이럴 때 Comparator를 사용해 나만의 정렬 기준을 정의할 수 있다.

문자열 길이에 따른 정렬

예를 들어, 문자열 배열을 길이에 따라 정렬하고 싶다면 다음과 같이 할 수 있다.

String[] words = {"banana", "apple", "grape", "orange"};

Arrays.sort(words, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(s1.length(), s2.length());
    }
});

System.out.println(Arrays.toString(words));  // [apple, grape, banana, orange]

위 코드에서는 문자열의 길이를 기준으로 배열이 정렬되었다. 짧은 문자열이 먼저 오고, 긴 문자열이 뒤에 오게 된다.

내림차순 정렬

숫자 배열을 내림차순으로 정렬하는 것도 가능하다. 이를 위해 Comparator를 사용하여 정렬 기준을 정의할 수 있다.

Integer[] numbers = {5, 3, 8, 1, 2};

Arrays.sort(numbers, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return b - a;  // 내림차순으로 정렬
    }
});

System.out.println(Arrays.toString(numbers));  // [8, 5, 3, 2, 1]

위 예제에서는 큰 숫자가 먼저 오도록 내림차순으로 배열을 정렬하였다.

특정 인덱스의 문자로 문자열 배열 정렬

문자열 배열을 특정 인덱스의 문자에 따라 정렬하고 싶을 때도 있다. 예를 들어, 문자열의 두 번째 문자를 기준으로 정렬하려면 다음과 같이 할 수 있다.

String[] words = {"sun", "bed", "car"};

Arrays.sort(words, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        int index = 1;  // n번째 인덱스
        char c1 = s1.charAt(index);
        char c2 = s2.charAt(index);
        return Character.compare(c1, c2);
    }
});

System.out.println(Arrays.toString(words));  // [car, bed, sun]

이 코드에서는 각 문자열의 두 번째 문자를 기준으로 배열이 정렬되었다. car의 두 번째 문자 a, bed의 두 번째 문자 e, sun의 두 번째 문자 u가 각각 비교되어 정렬된다.

정리

Java에서 Arrays.sort는 매우 강력한 도구이다. 기본적으로 오름차순 정렬을 제공하지만, Comparator를 활용하면 다양한 기준에 따라 배열을 커스텀 정렬할 수 있다.


profile
서두르지 않으나 쉬지 않고

0개의 댓글