알고리즘 공부 중 새로 알게 된 Comparable / Comparator 에 대해 작성하였습니다.
java.lang.Comparable<T> 에 속함 compareTo(T o) 메서드를 오버라이딩해야 함 TreeSet, TreeMap, Collections.sort() 등)에서 사용됨 int compareTo(T o) Comparator를 사용해야 함 class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return this.age - other.age; // 나이 오름차순 정렬
}
}
java.util.Comparator<T> 에 속함 Collections.sort(), List.sort(), TreeSet, TreeMap) 등에 전달 가능 int compare(T o1, T o2) Comparator.comparing() 등을 사용하면 간단히 작성 가능 import java.util.*;
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
// 나이 기준 정렬
Comparator<Person> ageComparator = new Comparator<>() {
@Override
public int compare(Person p1, Person p2) {
return p1.age - p2.age;
}
};
// 이름 기준 정렬 (람다)
Comparator<Person> nameComparator = (p1, p2) -> p1.name.compareTo(p2.name);
List<Person> list = Arrays.asList(
new Person("Kim", 30),
new Person("Lee", 25),
new Person("Park", 28)
);
// 정렬 기준을 자유롭게 교체 가능
list.sort(ageComparator);
list.sort(nameComparator);
| 구분 | Comparable | Comparator |
|---|---|---|
| 위치 | 클래스 내부 구현 | 별도 구현 (외부 클래스, 익명 클래스, 람다 등) |
| 메서드 | compareTo(T o) | compare(T o1, T o2) |
| 정렬 기준 | 한 클래스 당 1개만 가능 | 하나의 클래스에 대해 여러 개 정의 가능 |
| 사용 용도 | 기본(자연) 정렬 기준 설정 | 사용자 정의 정렬 기준 설정 |
| 대표 활용처 | TreeSet, TreeMap, Collections.sort() | Collections.sort(), List.sort(), TreeSet 등 |
읽어주셔서 감사합니다.
자바 [JAVA] - Comparable 과 Comparator의 이해
[Java] 자바 객체 정렬 Comparable과 Comparator의 이해
[Java] Comparable과 Comparator로 객체 정렬하기
Comparable과 Comparator 어렵지 않습니다