목차
- 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
'Programming Language > Java' 카테고리의 다른 글
[Java] Primitive Array에 내림차순 정렬이 없는 이유 (1) | 2025.02.16 |
---|---|
Java에서 Primitive Array 정렬에 Dual-Pivot Quicksort를 선택한 이유 (0) | 2025.02.14 |
[Java] Java switch의 문자열 비교, 내부 원리와 성능 분석 (0) | 2025.02.13 |
[Java] List.of()로 생성된 불변 리스트와 컬렉션 초기화 (0) | 2025.02.13 |
[Java] 람다 표현식의 반환 타입 추론 (0) | 2025.02.13 |