Comparable & Comparator
객체의 정렬 기준을 명시하는 두 가지 방법
Interface Comparable
- 정의
정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스
- 구현
비교해야되는 자료형에 Comparable<T>을 implements 후, compareTo(T a) 메서드를 입맛대로 오버라이딩한다
- compareTo(T a) 작성방법
return 음수 = 현재 객체가 뒤에 정렬됨
return 양수 = 현재 객체가 앞에 정렬됨
return 0 = 정렬이 일어나지 않음
- 사용
Arrays.sort(array);
Collections.sort(list);
알아서 오버라이드된 compareTo()를 기준으로 정렬된다
Interface Comparator
- 정의
정렬 가능한 클래스들의 기본 정렬 기준(Compartable<T>)과 다르게 정렬 하고 싶을 때 사용하는 인터페이스
- 구현
정렬 기준을 정의하는 클래스를 만들어 Comparator<T>을 implements 후, compare(T a, T b) 메서드를 입맛대로 오버라이딩한다
- compare(T a, T b) 작성방법
return 음수= 첫 번째 파라미터가 뒤에 정렬됨
return 양수 = 첫 번째 파라미터가 앞에 정렬됨
return 0 = 정렬이 일어나지 않음
- 사용
Arrays.sort(array, myComparator);
Collections.sort(list, myComparator);
myComparator에 compare()를 기준으로 정렬된다
Comparable와 Comparator의 차이점
- 개념
- Comparable은 자기 자신을 중심으로 정렬하는 기준을 정의한다
- Comparator은 해당 객체를 정렬하는 기준을 정의한다
- 사용
- Comparable과 Comparator를 같이 썼다 하더라도 Comparator의 정렬 기준이 우선적으로 적용된다
- Comparable은 기본적으로 실행해야 할 메서드를 오버라이딩한 것이고, Comparator은 기본적인 정렬 기준을 무시하고 새로운 기준을 제시하는 것이다
'JAVA' 카테고리의 다른 글
[JAVA] [끄적임] 컬렉션 정리-1 컬렉션 프레임워크의 구조 (0) | 2022.08.29 |
---|---|
[JAVA] [끄적임] 제네릭 (generics) (0) | 2022.08.29 |
[JAVA] [끄적임] 입출력 스트림과 버퍼 스트림 (0) | 2022.08.29 |
[JAVA] [끄적임] 인터페이스 간단 정리 (0) | 2022.08.24 |
[JAVA] [끄적임] 쓰레드의 기능 정리 (0) | 2022.08.24 |