Comparator 와 Comparable
: 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있음
: 작은 값에서부터 큰 값의 순으로 정렬되도록 구현되어 있음
public interface Comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
public interface Comparable {
public int compareTo(Object o);
}
public final class Integer extends Number implements Comparable {
...
public int compareTo(Object o) {
return compareTo((Integer)o);
}
public int compareTo(Integer anotherInteger) {
int thisVal = this.value;
int anotherVal = anotherInteger.value;
//비교하는 값이 크면 -1, 같으면 0, 작으면 1을 반환
return (thisVal<anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
}
...
}
Comparable : 기본 정렬기준을 구현하는데 사용
Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
static void sort(Object[] a) // 객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) // 지정한 Comparator에 의한 정렬
* 문자열을 내림차순으로 정렬하는 방법
: compareTo()의 결과에 -1를 곱한다.
: 다만 compare()의 매개변수가 Object타입이기 때문에 comparable로 형변환해야 한다.
class Descending implements Comparator {
public int compare(Object o1, Object o2) {
if(o1 instanceof Comparable && o2 instanceof Comparable) {
Comparable c1 = (Comparable)o1;
Comparable c2 = (Comparable)o2;
return c1.compare(c2) * -1; // 기본 정렬방식의 역으로 변경한다.
}
return -1;
}
}
'Language > java' 카테고리의 다른 글
[Java] 컬렉션 프레임윅 (TreeSet) (0) | 2022.07.27 |
---|---|
[Java] 컬렉션 프레임윅 (HashSet) (1) | 2022.07.27 |
[Java] 컬렉션 프레임윅 (Arrays) (0) | 2022.07.27 |
[Java] 컬렉션 프레임윅 (Iterator, ListIterator, Enumeration) (0) | 2022.07.27 |
[Java] 컬렉션 프레임윅 (Stack과 Queue) (0) | 2022.07.21 |
댓글