Comparable#
- single element의 정렬을 제공한다. 예를 들면 ID, 이름, 가격 등
- 원본 클래스가 변경된다.
- element 정렬을 위해서 compareTo() 메소드를 제공한다
- Comparable은 java.lang 패키지에 존재한다
- Comparable을 상속하는 list형태의 Collection은
Collections.sort(List)
메소드를 사용할 수 있다.
- Comparable은 상속을 받아야 하기 때문에 OOP 관점에서 보면 인터페이스와 커플링이 발생하게 된다. 커플링 문제를 해결하기 위해 Comparator를 사용한다
Comparator#
- multiple element의 정렬을 지원한다. 예를들면 (ID,이름)을 묶어서 정렬할 수 있다.
- element 정렬을 위해서 compare() 메소드를 제공한다
- Comparator는 java.util 패키지에 존재한다
- list형태의 Collection을
Collection.sort(List,Comparator)
메소드를 사용해서 정렬할 수 있다.
공식문서에서 발췌한 글#
Comparator#
- 공식문서 링크
- Comparasion function은 collection 오브젝트에 전체 정렬을 위한 함수이다.
- Comparator는 정렬 메소드(Collections.sort, Arrays.sort)에 주입됨으로써 정렬에 대한 방법을 개발자가 정의할 수 있다.
- Comparator는 sorted sets나 sorted maps와 같은 특정 자료구조에서도 사용될 수 있다.
c.compare(e1, e2)==0
라는 뜻은 e1.equals(e2)
와 똑같은 연산을 하고 있다는 뜻이다.
- equals를 사용하지 않는 순서매기기 방법을 사용할때는 주의해야한다.
- 비어 있는 TreeSet에 2개의 elements(a,b)를 넣는다고 가정하자.
a.equals(b) && c.compare(a, b) != 0
연산을 했을때 결과는 어떻게 될까?
참고한 링크#