🔀 Java의 정렬 방법 총정리
- Comparable, Comparator부터 Collections.sort, Stream.sorted까지
✅ 자바에서 정렬이 필요한 이유
데이터를 다루는 대부분의 프로그램에서는 정렬이 핵심 작업입니다.
Java에서는 다양한 방식으로 정렬을 지원하며,
기본 타입부터 사용자 정의 객체까지 정렬이 가능합니다.
📚 자바의 대표적인 정렬 방법
정렬 방법 | 설명 |
Arrays.sort() | 배열 정렬 |
Collections.sort() | 리스트 정렬 |
List.sort() | 자바 8 이후 리스트 정렬 메서드 |
Stream.sorted() | 스트림에서 정렬 |
PriorityQueue | 자동 정렬 큐 |
TreeSet, TreeMap | 정렬이 보장되는 컬렉션 |
🧩 1. 기본 정렬: Arrays.sort() & Collections.sort()
📌 배열 정렬
int[] arr = {5, 2, 4, 1};
Arrays.sort(arr); // 오름차순 정렬
System.out.println(Arrays.toString(arr)); // [1, 2, 4, 5]
📌 리스트 정렬
List<String> names = Arrays.asList("Charlie", "Alice", "Bob");
Collections.sort(names); // 오름차순
System.out.println(names); // [Alice, Bob, Charlie]
🧠 2. 사용자 정의 정렬: Comparable & Comparator
📍 Comparable (내부 정렬 기준 정의)
class Person implements Comparable<Person> {
String name;
int age;
public int compareTo(Person o) {
return this.age - o.age; // 나이 오름차순
}
}
- Collections.sort() 또는 Arrays.sort()에서 자동 사용됨
📍 Comparator (외부 정렬 기준 지정)
List<Person> list = ...
list.sort(Comparator.comparingInt(p -> p.age));
또는
list.sort((p1, p2) -> p2.age - p1.age); // 나이 내림차순
✔ 정렬 기준을 유연하게 바꾸고 싶다면 Comparator 사용!
⚙️ 3. Java 8+ 스타일 정렬
📍 List.sort()
list.sort(Comparator.comparing(Person::getName));
📍 Stream.sorted()
List<Person> result = list.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
🔎 스트림 안에서도 정렬 가능 — 특히 필터, 맵핑, 정렬 후 수집하는 경우 유용
🔁 4. 정렬이 유지되는 자료구조
자료구조 | 특징 |
PriorityQueue | 자동 정렬 큐 (min-heap 구조) |
TreeSet | 자동 정렬된 Set |
TreeMap | 자동 정렬된 Map |
Set<Integer> set = new TreeSet<>();
set.add(3); set.add(1); set.add(2);
System.out.println(set); // [1, 2, 3]
🧪 실전 예제: 객체 리스트 정렬
class Student {
String name;
int score;
}
List<Student> students = ...
// 점수 기준 오름차순
students.sort(Comparator.comparingInt(s -> s.score));
// 점수 기준 내림차순 + 이름 기준 오름차순
students.sort(Comparator.comparingInt(Student::getScore).reversed()
.thenComparing(Student::getName));
✅ 마무리 요약
정렬 도구 | 용도 |
Arrays.sort() | 배열 정렬 |
Collections.sort() | 리스트 정렬 |
Comparator, Comparable | 사용자 정의 정렬 기준 |
List.sort(), Stream.sorted() | 자바 8 이후의 정렬 방식 |
PriorityQueue, TreeSet | 자동 정렬 유지되는 컬렉션 |
자바는 정렬을 위한 다양한 도구와 전략을 제공합니다.
목적에 맞게 정렬 기준을 정의하고,
성능과 가독성 모두를 챙긴 코드를 작성해보세요! 😊
'Web Programming Language > JAVA' 카테고리의 다른 글
자바 PriorityQueue (0) | 2025.07.16 |
---|---|
Collections.binarySearch()와 Arrays.binarySearch() 차이 (0) | 2025.07.16 |
자바 Collections.binarySearch() (0) | 2025.07.16 |
default method (0) | 2025.05.18 |
필드(Field)와 프로퍼티(Property)의 차이 (1) | 2025.04.22 |