반응형
반응형
코테를 현재 준비하고 있다면 배열 / 리스트 / 일부 구간 / 커스텀 Comparator까지 자유자재로 다룰 수 있어야 합니다. 막상 코테 시작하면 생각이 잘 안 날 수 있는 문법이기 때문에 오늘 포스팅에서는 잘 정리해보려고 합니다!
🌏 자바 정렬 완벽 정리
✅ 기본 배열 정렬
// 오름차순 정렬
int[] arr = {5, 3, 8, 1};
Arrays.sort(arr);
// 결과: [1, 3, 5, 8]
// 내림차순 정렬 (int는 불가능, Integer로 변환해야 함)
Integer[] arr2 = {5, 3, 8, 1};
Arrays.sort(arr2, Collections.reverseOrder());
// 결과: [8, 5, 3, 1]
Tip: int[] 같은 기본형 배열은
Collections.reverseOrder()못 쓰기 때문에, 내림차순 필요할 때는Integer[]로 박싱하거나 직접Comparator를 정의해야 합니다.
✅ 기본 리스트 정렬
List<String> list = new ArrayList<>(Arrays.asList("banana", "apple", "cherry"));
// 오름차순
Collections.sort(list);
// 결과: [apple, banana, cherry]
// 내림차순
Collections.sort(list, Comparator.reverseOrder());
// 결과: [cherry, banana, apple]
Tip:
Collections.sort()는 리스트만 받습니다. 배열은 반드시Arrays.sort()를 사용해야 합니다.
✅ 일부만 정렬하기 (부분 구간 정렬)
int[] arr = {5, 3, 8, 1, 7, 2};
// 인덱스 1 이상, 4 미만 구간만 정렬
Arrays.sort(arr, 1, 4);
// 결과: [5, 1, 3, 8, 7, 2]
// 리스트 일부 정렬
List<Integer> list = new ArrayList<>(Arrays.asList(5, 3, 8, 1, 7, 2));
list.subList(1, 4).sort(Comparator.naturalOrder());
// 결과: [5, 1, 3, 8, 7, 2]
주의:
Arrays.sort(arr, from, to)는 from ≤ i < to 범위만 정렬합니다. (앞은 포함, 뒤는 미포함)
✅ 커스텀 정렬
아래 2가지 케이스로 대부분 커버가 될 것 같습니다.
Case 1: Array
int[][] arr = {
{1, 5},
{2, 3},
{1, 2}
};
// 첫 번째 원소 기준 오름차순
Arrays.sort(arr, (a, b) -> Integer.compare(a[0], b[0]));
// 결과: {{1,5}, {1,2}, {2,3}}
// 첫 번째 같으면 두 번째 기준 정렬
Arrays.sort(arr, (a, b) -> {
if (a[0] == b[0]) return Integer.compare(a[1], b[1]);
return Integer.compare(a[0], b[0]);
});
// 결과: {{1,2}, {1,5}, {2,3}}
Case 2: Class
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + "(" + age + ")";
}
}
List<Person> list = new ArrayList<>();
list.add(new Person("Kim", 25));
list.add(new Person("Lee", 20));
list.add(new Person("Park", 25));
// 나이 기준 오름차순, 나이 같으면 이름 오름차순
list.sort((p1, p2) -> {
if (p1.age == p2.age) return p1.name.compareTo(p2.name);
return Integer.compare(p1.age, p2.age);
});
// 결과: [Lee(20), Kim(25), Park(25)]
✅ 자주 쓰는 Comparator 패턴 모음
// 숫자 내림차순
list.sort((a, b) -> Integer.compare(b, a));
// 문자열 길이 기준
list.sort((a, b) -> Integer.compare(a.length(), b.length()));
// 여러 조건 (1순위 → 2순위)
list.sort(Comparator.comparing((Person p) -> p.age)
.thenComparing(p -> p.name));
✅ 정리
- 배열 정렬:
Arrays.sort(arr) - 리스트 정렬:
Collections.sort(list)또는list.sort() - 일부 구간 정렬:
Arrays.sort(arr, from, to)/list.subList(from, to).sort() - 커스텀 정렬:
Comparator(배열 →Arrays.sort, 리스트 →list.sort)
여러모로 복잡한 정렬에는 배열보다는 리스트가 더 유리한 것 같은데, 다음 포스팅에서는 배열을 리스트로 변환하는 여러 가지 방법에 대해 포스팅하려고 합니다!

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
반응형
'언어+프레임워크 > JAVA' 카테고리의 다른 글
| [JAVA] 코테 기본기(3): 빠른 입출력 템플릿 (Scanner + System.out.println 쓰면 망해요!) (0) | 2025.09.08 |
|---|---|
| [JAVA] 코테 기본기(2): 배열 to 리스트 변환 완벽 정리 (0) | 2025.09.05 |
| [JAVA] 3가지 List 생성 방법 비교와 진정한 불변리스트 (불변리스트는 정말 객체까지 불변일까?) (1) | 2025.03.25 |
| [JAVA] try-with-resources를 사용해서 리소스 누수를 방지하자! (0) | 2023.09.29 |
| [JAVA] Reflection API: 개념, 사용법, 예시 코드 (0) | 2023.09.28 |