<aside>
💡 Comparable
인터페이스의 유일무이한 메서드인 compareTo
를 알아보자!
</aside>
compareTo
는 Object
의 메서드가 아니다.
compareTo
는 단순 동치성 비교, 순서까지 비교할 수 있으며, 제네릭하다.Comparable
을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다.Comparable
을 구현한 객체들의 배열은 손쉽게 정렬할 수 있다.
Arrays.sort(a);
public class WordList {
public static void main(String[] args) {
final Set<String> s = new TreeSet<>();
Collections.addAll(s, args);
System.out.println(s);
}
}
사실상 자바 플랫폼 라이브러리의 모든 값 클래스와 열거 타입이
Comparable
을 구현했다.
Comparable
인터페이스를 구현하자.public interface Comparable<T> {
int compareTo(T t);
}
compareTo
메서드의 일반 규약은equals
의 규약과 비슷하다.
객체와 주어진 객체의 순서를 비교한다.
ClassCastException
을 던진다.Comparable
을 구현한 클래스는 모든 x
, y
에 대해 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
여야 한다.
Comparable
을 구현한 클래스는 추이성을 보장해야 한다.
(x.compareTo(y) > 0 && y.compareTo(z) > 0)
이면, x.compareTo(z) > 0
이다.