코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java_Sort an Array

자바에서 배열 정렬하기 (Java Sort an Array)

자바에서 배열을 정렬하는 방법은 Arrays.sort() 메서드와 Collections API를 활용하는 방법이 있습니다. 자바는 기본적으로 **퀵 정렬(Dual-Pivot Quicksort)**을 사용해 배열을 정렬하며, 이 방법은 평균적으로 **O(n log n)**의 시간 복잡도를 가집니다.

다양한 데이터 타입(정수, 실수, 문자열 등)에 맞춰 배열을 정렬할 수 있으며, 커스텀 정렬을 적용하거나 내림차순으로 정렬하는 방법도 가능합니다.

1. Arrays.sort()를 사용한 배열 정렬

Arrays.sort() 메서드는 배열을 오름차순으로 정렬하는 가장 기본적인 방법입니다. 이 메서드는 정수, 실수, 문자열 등의 배열을 쉽게 정렬할 수 있습니다.

1.1 정수 배열을 정렬하는 예제

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 정수 배열 선언
        int[] numbers = {5, 2, 9, 1, 5, 6};

        // 배열을 오름차순으로 정렬
        Arrays.sort(numbers);

        // 결과 출력
        System.out.println("정렬된 배열: " + Arrays.toString(numbers));
    }
}

설명:

  • *Arrays.sort()*는 배열을 오름차순으로 정렬합니다.
  • Arrays.toString() 메서드를 사용해 배열을 문자열로 변환하여 출력합니다.

출력:

정렬된 배열: [1, 2, 5, 5, 6, 9]

1.2 문자열 배열을 정렬하는 예제

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 문자열 배열 선언
        String[] words = {"apple", "orange", "banana", "grape"};

        // 배열을 오름차순으로 정렬
        Arrays.sort(words);

        // 결과 출력
        System.out.println("정렬된 배열: " + Arrays.toString(words));
    }
}

출력:

정렬된 배열: [apple, banana, grape, orange]

2. 내림차순 정렬

배열을 내림차순으로 정렬하려면 Arrays.sort() 메서드와 Comparator 인터페이스를 함께 사용해야 합니다. 자바에서는 기본 데이터 타입(예: int, double)은 **Comparator**를 사용할 수 없으므로, 이를 **객체 타입(Integer, Double 등)**으로 변환한 후 내림차순 정렬을 수행해야 합니다.

2.1 정수 배열을 내림차순으로 정렬하는 예제

import java.util.Arrays;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        // Integer 배열 선언 (기본형 int 배열은 Comparator 사용 불가)
        Integer[] numbers = {5, 2, 9, 1, 5, 6};

        // 배열을 내림차순으로 정렬
        Arrays.sort(numbers, Collections.reverseOrder());

        // 결과 출력
        System.out.println("내림차순으로 정렬된 배열: " + Arrays.toString(numbers));
    }
}

설명:

  • Collections.reverseOrder(): 배열을 내림차순으로 정렬하기 위한 Comparator를 제공합니다.
  • *기본 데이터 타입(int, double)**은 Comparator를 사용할 수 없기 때문에 Integer 또는 Double 등의 객체 타입 배열을 사용해야 합니다.

출력:

내림차순으로 정렬된 배열: [9, 6, 5, 5, 2, 1]

2.2 문자열 배열을 내림차순으로 정렬하는 예제

import java.util.Arrays;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        // 문자열 배열 선언
        String[] words = {"apple", "orange", "banana", "grape"};

        // 배열을 내림차순으로 정렬
        Arrays.sort(words, Collections.reverseOrder());

        // 결과 출력
        System.out.println("내림차순으로 정렬된 배열: " + Arrays.toString(words));
    }
}

출력:

내림차순으로 정렬된 배열: [orange, grape, banana, apple]

3. 커스텀 정렬

Comparator 인터페이스를 사용하면 배열을 사용자 정의 기준에 따라 정렬할 수 있습니다. 이를 통해 문자열의 길이, 특정 조건 등을 기준으로 정렬할 수 있습니다.

3.1 문자열을 길이에 따라 정렬하는 예제

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        // 문자열 배열 선언
        String[] words = {"apple", "banana", "kiwi", "grapefruit"};

        // 문자열 길이에 따라 정렬
        Arrays.sort(words, Comparator.comparingInt(String::length));

        // 결과 출력
        System.out.println("문자열 길이에 따른 정렬: " + Arrays.toString(words));
    }
}

설명:

  • Comparator.comparingInt(): 특정 정수 값(여기서는 문자열의 길이)을 기준으로 정렬합니다.
  • *String::length*는 문자열의 길이를 반환하는 메서드 참조입니다.

출력:

문자열 길이에 따른 정렬: [kiwi, apple, banana, grapefruit]

3.2 문자열을 길이에 따라 내림차순으로 정렬

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        // 문자열 배열 선언
        String[] words = {"apple", "banana", "kiwi", "grapefruit"};

        // 문자열 길이에 따라 내림차순으로 정렬
        Arrays.sort(words, Comparator.comparingInt(String::length).reversed());

        // 결과 출력
        System.out.println("문자열 길이에 따른 내림차순 정렬: " + Arrays.toString(words));
    }
}

설명:

  • reversed() 메서드를 사용해 내림차순으로 정렬할 수 있습니다.

출력:

문자열 길이에 따른 내림차순 정렬: [grapefruit, banana, apple, kiwi]

4. Stream API를 사용한 배열 정렬 (자바 8 이상)

자바 8 이상에서는 Stream API를 사용하여 배열을 간결하고 선언적으로 정렬할 수 있습니다. Stream은 데이터 흐름을 처리하는 강력한 도구로, 배열뿐만 아니라 컬렉션의 정렬도 매우 쉽게 처리할 수 있습니다.

4.1 Stream을 사용한 정렬 예제

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 정수 배열 선언
        int[] numbers = {5, 2, 9, 1, 5, 6};

        // Stream API를 사용하여 배열을 오름차순으로 정렬
        int[] sortedNumbers = Arrays.stream(numbers).sorted().toArray();

        // 결과 출력
        System.out.println("Stream을 사용한 정렬된 배열: " + Arrays.toString(sortedNumbers));
    }
}

설명:

  • Arrays.stream(): 배열을 Stream으로 변환합니다.
  • sorted(): Stream의 요소를 정렬합니다.
  • toArray(): 정렬된 Stream을 배열로 변환합니다.

출력:

Stream을 사용한 정렬된 배열: [1, 2, 5, 5, 6, 9]

4.2 Stream을 사용한 내림차순 정렬

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        // 정수 배열 선언 (객체 배열로 변환)
        Integer[] numbers = {5, 2, 9, 1, 5, 6};

        // Stream API를 사용하여 배열을 내림차순으로 정렬
        Integer[] sortedNumbers = Arrays.stream(numbers)
                                        .sorted(Comparator.reverseOrder())
                                        .toArray(Integer[]::new);

        // 결과 출력
        System.out.println("Stream을 사용한 내림차순 정렬된 배열: " + Arrays.toString(sortedNumbers));
    }
}

설명:

  • *Comparator.reverseOrder()*를 사용해 내림차순으로 정렬합니다.

출력:

Stream을 사용한 내림차순 정렬된 배열: [9, 6, 5, 5, 2, 1]

요약

  • *Arrays.sort()*는 기본적으로 오름차순으로 배열을 정렬합니다.
  • *Collections.reverseOrder()*를 사용해 배열을 내림차순으로 정렬할 수 있습니다.
  • *Comparator*를 사용하여 커스텀 정렬을 구현할 수 있습니다.
  • 자바 8 이상에서는 Stream API를 사용해 선언적으로 배열을 정렬할 수 있습니다.

이러한 방법을 통해 자바에서 배열을 쉽게 정렬할 수 있으며, 상황에 맞게 다양한 정렬 방식을 선택할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com