자바 Collections에서 정렬하는 방법은 무엇인가요?
자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다.
자바에서는 컬렉션(Collection) 자료구조의 요소들을 정렬하기 위해 주로 `Collections.sort()` 메서드 를 사용합니다.
또한, 자바 8부터는 람다 표현식과 Comparator 인터페이스 를 활용하여 보다 유연한 정렬이 가능합니다.
--- 1. `Collections.sort()` 메서드 사용하기 `Collections.sort()`는 `List` 인터페이스를 구현한 리스트를 오름차순으로 정렬합니다.
```java List list = Arrays.asList(5, 3, 8, 1); Collections.sort(list); System.out.println(list); // 출력: [1, 3, 5, 8] ``` - 요소가 `Comparable`을 구현해야 함 `Collections.sort()`를 활용하려면 리스트 내 객체가 `Comparable` 인터페이스를 구현해야 합니다.
기본 자료형 래퍼클래스(`Integer`, `String` 등)은 이미 구현되어 있습니다.
```java class Person implements Comparable { String name; int age; // 생성자, getter, setter 생략 // 나이 기준 오름차순 정렬 @Override public int compareTo(Person other) { return Integer.compare(this.age, other.age); } } ``` 2. Comparator를 사용한 정렬 `Comparable` 대신 `Comparator` 인터페이스를 사용하면, 객체 내부 코드를 수정하지 않고도 다양한 정렬 기준을 적용할 수 있습니다.
```java List people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35) ); // 이름 기준 오름차순 정렬 Collections.sort(people, new Comparator() { @Override public int compare(Person p1, Person p2) { return p1.name.compareTo(p2.name); } }); ``` - 자바 8 이상: 람다 표현식으로 간결하게 ```java Collections.sort(people, (p1, p2) -> p1.name.compareTo(p2.name)); ``` 또는 `List`의 `sort()` 메서드 사용 가능: ```java people.sort(Comparator.comparing(Person::getName)); ``` 3. 내림차순 정렬 `Comparator`의 `reversed()` 메서드를 이용하면 쉽게 내림차순 정렬도 할 수 있습니다.
```java people.sort(Comparator.comparing(Person::getAge).reversed()); ``` 4. 정리 | 정렬 방법 | 설명 | 예제 | |---------------------------------|-------------------------------------------------------------------|--------------------------------------------| | `Collections.sort(List)` | 리스트 내 객체가 `Comparable` 구현 시 오름차순 정렬 | `Collections.sort(list);` | | `Collections.sort(List, Comparator)` | 사용자 정의 정렬 기준에 맞게 정렬 | `Collections.sort(list, comparator);` | | `List.sort(Comparator)` | 자바 8부터 도입된 메서드, 람다와 함께 자주 사용 | `list.sort((a, b) -> a.getName().compareTo(b.getName()));` | | 내림차순 정렬 | `Comparator.reversed()` 메서드 활용 | `list.sort(Comparator.comparing(...).reversed());`| --- 참고 코드 예제 ```java import java.util.*; class Person implements Comparable { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person other) { return Integer.compare(this.age, other.age); } @Override public String toString() { return name + "(" + age + ")"; } } public class SortExample { public static void main(String[] args) { List people = new ArrayList<>(); people.add(new Person("Alice", 30)); people.add(new Person("Bob", 25)); people.add(new Person("Charlie", 35)); // 기본 내림차순 Collections.sort(people); System.out.println("나이 오름차순: " + people); // 이름 오름차순 people.sort(Comparator.comparing(Person::getName)); System.out.println("이름 오름차순: " + people); // 이름 내림차순 people.sort(Comparator.comparing(Person::getName).reversed()); System.out.println("이름 내림차순: " + people); } } ``` --- 이상으로 자바 컬렉션에서 정렬하는 기본적인 방법과 사용법에 대해 설명드렸습니다.
필요에 따라 적절히 `Comparable` 또는 `Comparator`를 이용하면 다양한 정렬 요구사항을 반영할 수 있습니다.