티스토리 뷰

728x170

 

Arrays.sort()를 사용하면 배열을 오름차순 또는 내림차순으로 정렬 할 수 있습니다.

 

자료형에 따라서 다음과 같은 배열들이 있으며, 모두 Arrays.sort()로 정렬할 수 있습니다.

  • "기본 자료형(int 등)" 배열
  • 문자열 배열
  • 객체 배열

각 케이스 별 예제 코드를 확인해보면서 정렬에 대해서 알아보겠습니다.

 

기본 자료형 배열 정렬(오름차순)

기본 자료형은 int, float 같은 자료형을 말합니다. 아래와 같이 int 배열을 Arrays.sort()로 정렬할 수 있습니다.

  • Arrays.sort(배열)은 배열을 정렬합니다. (원본 배열의 순서가 변경됨)
  • 기본적으로 오름차순으로 정렬합니다.
  • 정렬된 결과를 출력해보면, 원본 배열이 오름차순으로 변경된 것을 확인할 수 있습니다.
import java.util.Arrays;

public class Example1 {
    public static void main(String[] args) {

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

        // 배열 정렬
        Arrays.sort(numbers);

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

 

Output:

Sorted array: [1, 2, 3, 5, 7, 8]

 

기본 자료형 배열 정렬(내림차순)

Arrays.sort(배열, Collections.reverseOrder())는 역순으로 정렬합니다. 즉, Arrays.sort(배열)가 정렬하는 반대 방향으로 정렬하게 됩니다.

  • sort()에 Collections.reverseOrder()를 인자로 전달하려면 배열은 int[]가 아닌 Integer[] 처럼, 기본 자료형의 클래스로 객체가 선언되어야 합니다.
  • 결과를 보면 내림차순으로 정렬된 것을 볼 수 있습니다.
import java.util.Arrays;
import java.util.Collections;

public class Example2 {
    public static void main(String[] args) {

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

        // 배열 정렬
        Arrays.sort(numbers, Collections.reverseOrder());

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

Output:

Sorted array: [8, 7, 5, 3, 2, 1]

 

문자열 배열 정렬(오름차순)

문자열 배열도 위와 동일하게 정렬할 수 있습니다. 아래 예제는 오름차순으로 문자열을 정렬합니다. 문자열 정렬은 기본적으로 대문자가 소문자보다 작고(사전상 순서가 앞), A가 Z보다 작습니다(사전상 순서가 앞)

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

public class Example3 {
    public static void main(String[] args) {

        String[] fruits = {"Orange", "Apple", "Banana", "Pineapple"};

        // 배열 정렬
        Arrays.sort(fruits);

        // 정렬된 배열 출력
        System.out.println("Sorted array: " + Arrays.toString(fruits));
    }
}

Output:

Sorted array: [Apple, Banana, Orange, Pineapple]

 

문자열 배열 정렬(내림차순)

Collections.reverseOrder()를 인자로 전달하여 내림차순으로 정렬할 수 있습니다.

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

public class Example4 {
    public static void main(String[] args) {

        String[] fruits = {"Orange", "Apple", "Banana", "Pineapple"};

        // 배열 정렬
        Arrays.sort(fruits, Collections.reverseOrder());

        // 정렬된 배열 출력
        System.out.println("Sorted array: " + Arrays.toString(fruits));
    }
}

Output:

Sorted array: [Pineapple, Orange, Banana, Apple]

 

객체 배열 정렬(오름차순)

객체 배열도 위와 같이 정렬할 수 있습니다. 하지만 객체의 경우, int나 String과 다르게 어떤 객체의 순서가 먼저인지 알기 어렵기 때문에, 순서를 결정하는 로직을 클래스 내부의 compareTo() 함수에 구현해줘야 합니다.

  • Person 클래스의 compareTo(Person other)는 정렬할 때, 두 객체들 중에서 어떤 것이 빠른지 순서를 결정하는 로직입니다.
  • compareTo()를 보면 A 객체와 B 객체의 age의 차를 리턴하는데, 음수는 A가 B보다 작음, 양수는 A가 B보다 큼, 0은 A와 B가 같음을 의미합니다. 따라서 this.age가 작으면 음수를 리턴하며 this.age가 더 작다는 것을 의미합니다.
import java.util.Arrays;

public class Example5 {
    public static void main(String[] args) {

        Person[] people = {
                new Person("John", 25),
                new Person("Jane", 22),
                new Person("Tom", 28)
        };

        // 배열 정렬
        Arrays.sort(people);

        // 정렬된 배열 출력
        System.out.println("Sorted array: " + Arrays.toString(people));
    }

    static class Person implements Comparable<Person> {
        String name;
        int age;

        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public int compareTo(Person other) {
            return this.age - other.age; // 나이순 정렬
        }

        @Override
        public String toString() {
            return name + ": " + age;
        }
    }
}

Output:

Sorted array: [Jane: 22, John: 25, Tom: 28]

 

객체 배열 정렬(내림차순)

내림차순으로 정렬하려면 위와 동일하게 Collections.reverseOrder()를 인자로 전달하여, 기존 정렬 규칙을 반대로 적용하면 됩니다.

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

public class Example6 {
    public static void main(String[] args) {

        Person[] people = {
                new Person("John", 25),
                new Person("Jane", 22),
                new Person("Tom", 28)
        };

        // 배열 정렬
        Arrays.sort(people, Collections.reverseOrder());

        // 정렬된 배열 출력
        System.out.println("Sorted array: " + Arrays.toString(people));
    }

    static class Person implements Comparable<Person> {
        String name;
        int age;

        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public int compareTo(Person other) {
            return this.age - other.age; // 나이순 정렬
        }

        @Override
        public String toString() {
            return name + ": " + age;
        }
    }
}

Output:

Sorted array: [Tom: 28, John: 25, Jane: 22]

 

그리드형
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
세로형