본문 바로가기
Programming Language/Java

[Java] Java의 다양한 정렬 방법 1 : Primitive / Object

by kimyoungrok 2025. 2. 17.
728x90

목차

  • Primitive Array 정렬하기
  • Object Array 정렬하기
  • 정리
  • 예제 코드

Java에는 다양한 타입(Primitive / Object / Collections)의 배열이 존재할 수 있으며, 정렬하는 방식도 제각각입니다.

이번 글에서는 Primitive / Object 배열을 정렬하는 방법에 대해 알아보겠습니다.


1️⃣ Primitive Array 정렬하기

Arrays.sort()는 원시 배열을 정렬할 수 있습니다. 기본적으로 오름차순 정렬이 되며, 내부적으로 Dual-Pivot Quicksort 알고리즘을 사용합니다

SortPrimitiveArray.java

Arrays.sort()를 사용해 Primitive Array를 정렬하는 방법은 다음과 같습니다.

package pl.java.D250216;

import java.util.Arrays;

public class SortPrimitiveArray {
    public static void main(String[] args) {
        int[] primitiveArray = {9, 2, 1, 5, 7};
        Arrays.sort(primitiveArray);
        System.out.println(Arrays.toString(primitiveArray));
    }
}
/*
[1, 2, 5, 7, 9]
*/

내림차순 정렬은 어떻게 하나요?

Primitive 배열은 내림차순 정렬이 기본 옵션으로 제공되지 않습니다. 이와 관련해서 이전 글을 참고하면 됩니다.

2025.02.16 - [Programming Language/Java] - [Java] Primitive Array에 내림차순 정렬이 없는 이유

 

[Java] Primitive Array에 내림차순 정렬이 없는 이유

목차왜 원시 배열은 내림차순 정렬을 지원하지 않을까?원시 배열을 내림차순 정렬하는 방법정리예제 코드자바에서는 Arrays.sort() 를 사용해 원시(Primitive) 배열을 쉽게 정렬할 수 있습니다. 하지

kyr-db.tistory.com

 


2️⃣ Object Array 정렬하기

객체 배열의 경우 정렬을 위해서는 객체들 간 자세한 비교 방법이 필요합니다.

그 중 가장 기본적인 방법부터 차례대로 살펴보겠습니다.

Comparator를 구현한 익명 클래스를 전달해 정렬하기

우선 Arrays.sort()의 두 번째 인자로 Comparator를 구현한 익명 클래스를 생성해 전달하는 방법입니다.

package pl.java.D250216;

import java.awt.*;
import java.util.Arrays;
import java.util.Comparator;

public class SortObjectArray1 {
    public static void main(String[] args) {
        Point[] points = {
                new Point(3, 7),
                new Point(3, 5),
                new Point(2, 4),
        };
        Arrays.sort(points, new Comparator<Point>() {
            @Override
            public int compare(Point p1, Point p2) {
                // x 좌표를 기준으로 정렬
                if (p1.x != p2.x) {
                    return p1.x - p2.x;
                } else {
                    // x 좌표가 같으면 y 좌표를 기준으로 정렬
                    return p1.y - p2.y;
                }
            }
        });
        System.out.println(Arrays.toString(points));
    }
}

/*
[java.awt.Point[x=2,y=4], java.awt.Point[x=3,y=5], java.awt.Point[x=3,y=7]]
*/

Comparator의 compare는 두 객체를 비교하여 정렬 순서를 결정하는 메서드입니다.

두 객체를 비교한 결과인 정수 값의 부호에 따라 객체의 순서가 결정됩니다.

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

Comparator (Java Platform SE 8 )

 

Comparator (Java Platform SE 8 )

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. In the foregoing description, the notation sgn(expression) designates the mathematical s

docs.oracle.com

 

첫 번째 인수와 두 번째 인수의 비교 결과가 0 또는 음수면 교환을 하지않고, 양수면 교환을 합니다.

오름차순 정렬 시 p1.x - p2.x의 결과는 p1.x ≤ p2.x와 동일하므로 다음과 같이 설정하면 됩니다.

return p1.x - p2.x;

만약 내림차순으로 정렬하기 위해서는 반대로 p1.x < p2.x일 때 교환이 일어나야 합니다. 다음과 같이 설정하면 됩니다.

return p2.x - p1.x;

객체 배열을 정렬하는 더 간결한 방법도 살펴보겠습니다.

Java 8 이상은 람다 표현식과 함수형 인터페이스를 제공하므로 더욱 간결하게 정렬을 할 수 있습니다.

Comparator의 람다 표현식을 전달해 정렬하기

이번에는 Comparator<Point>의 익명 클래스 대신 람다 표현식을 사용한 방법입니다.

우선 Comparator 인터페이스 내부를 살펴보겠습니다.

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
    .
    .
}

Comparator는 함수형 인터페이스로 하나의 추상 메서드 compare를 가지는 것을 확인할 수 있습니다.

때문에 다음과 같이 람다식 표현으로 Arrays.sort()의 두 번째 인자에 Comparator가 요구하는 compare의 구현체를 넘길 수 있습니다.

package pl.java.sort.Arrays;

import java.awt.*;
import java.util.Arrays;

public class SortObjectArray2 {
    public static void main(String[] args) {
        Point[] points = {
                new Point(3, 7),
                new Point(3, 5),
                new Point(2, 4),
        };

        Arrays.sort(points, (p1, p2) -> {
            if (p1.x != p2.x) return p1.x - p2.x;
            return p1.y - p2.y;
        });
        System.out.println(Arrays.toString(points));
    }
}

🔥 정리

✅ Arrays.sort()를 사용하여 원시 배열(primitive array)을 오름차순으로 쉽게 정렬할 수 있다.

✅ Arrays.sort()를 사용하여 객체 배열도 정렬할 수 있다.

✅ 객체 배열은 Arrays.sort()의 두 번째 인자로 Comparator의 compare구현체를 넘겨 정렬 기준을 변경할 수 있다.


예제 코드

tech-blog-code/pl/java/D250216 at main · rogi-rogi/tech-blog-code

728x90