본문 바로가기

Java Arrays.sort()가 int[]와 Integer[]에서 다르게 동작하는 이유

조회 2 · 댓글 0
OOOooOOoo작성자2026년 8월 24일

같은 Arrays.sort()인데 int[]에는 Comparator를 못 넘겨서 당황한 적 있으실 겁니다. 정렬 대상 타입에 따라 알고리즘 자체가 다르기 때문입니다. 공식 javadoc 기준으로 int[] 같은 원시 타입 배열은 Dual-Pivot Quicksort로 정렬하고, Object[](예: Integer[], String[])는 안정 정렬인 TimSort(적응형 병합 정렬)로 정렬합니다.

핵심 차이는 두 가지입니다. 첫째, 안정성. 원시 타입 배열은 안정성을 보장하지 않습니다. 반대로 Object[] 정렬은 "equal elements will not be reordered"로 명시된 안정 정렬입니다. 둘째, Comparator. Comparator를 받는 오버로드는 sort(T[], Comparator)처럼 객체 배열용만 존재하고 원시 타입 배열용은 없습니다. 즉 int[]는 오름차순 자연 순서로만 정렬됩니다.

그래서 정렬 기준을 바꾸거나 내림차순이 필요하면 Integer[]로 박싱해서 넘겨야 합니다. 원시 타입에서 정렬 후 뒤집는 방법도 있지만, Comparator가 필요하면 박싱이 정석입니다.

int[] a = {3, 1, 2};
Arrays.sort(a);                 // 오름차순만 가능
// Arrays.sort(a, Comparator.reverseOrder()); // 컴파일 에러

Integer[] b = {3, 1, 2};
Arrays.sort(b, Comparator.reverseOrder()); // [3, 2, 1] OK

🔗 https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Arrays.html

로그인 후 답글을 남길 수 있습니다.