1. Comparator과 Comparable
Comparator과 Comparable은 인터페이스입니다.
정렬에 필요한 메서드를 정의하고 있습니다.
Comparable을 구현하는 클래스는 Wrapper클래스와 String Date File등 입니다.
Comparable은 compareTo 메서드를 오버라이드 해야하고
Comparator은 compare, equals를 오버라이드 합니다.
- Comparable: 기본 정렬 기준 구현(기본적 오름차순)
- Comparator: 직접 정렬 기준을 사용
public interface Comparable {
// 같으면 0 , 작으면 음수, 크면 양수
int compareTo(Object o);
}
public interface Comparator {
// 같으면 0, 작으면 음수, 크면 양수
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
2. 예제
public class ComparatorEx {
public static void main(String[] args) {
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr); // String의 Comparable 구현에 의한 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대문자 구분X
System.out.println("strArr = " + Arrays.toString(strArr));
Arrays.sort(strArr, new Descending()); // 역순정렬
System.out.println("strArr = " + Arrays.toString(strArr));
}
}
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 c2.compareTo(c1); // 역순 정렬
return c1.compareTo(c2) * -1; // 역순 정렬
}
return -1;
}
}
Array.sort()는 Comparator를 구현한 클래스를 정의하지 않을 경우 Comparable을 통해 정렬됩니다.
- Arrays.sort(Object): Comparable 정렬
- Arrays.sort(Object, Comparator): 정의한 Comparator를 구현한 클래스 기반 정렬
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java- 컬렉션 프레임워크(TreeSet) (0) | 2019.07.21 |
---|---|
Java- 컬렉션 프레임워크(HashSet) (0) | 2019.07.21 |
Java- 컬렉션 프레임워크(Arrays) (0) | 2019.07.19 |
Java- 컬렉션 프레임워크(Iterator) (0) | 2019.07.18 |
Java- 컬렉션 프레임워크(Stack,Queue) (0) | 2019.07.17 |