📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[Comparator과 Comparable]
- Comparator - 기본 정렬기준을 구현하는데 사용
- Comparable - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interface Comparator{
int compare(Object o1, Object o2); // 두 객체를 비교
boolean equals(Object obj); // 이퀄스를 오버라이딩 하라는 뜻
}
public interface Comparable{
int compareTo(Object o); //주어진 객체(o)를 자신과 비교 this와 비교
}
- Compare()와 CompareTo()는 두 객체의 비교결과를 반환하도록 작성하고 같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+)
public final class Integer extends Number implements Comparable{
public int compareTo(Integer anotherInteger) {
int v1 = this.value;
int v2 = anotherInteger.value;
//같으면 0, 오른쪽 값이 크면 -1, 작으면 1을 반환
return (v1 < v2 ? -1: (v1==v2? 0 : 1));
}
}
[실습]
package javajungsuk;
import java.util.*;
public class Java11_7_1 {
public static void main(String[] args) {
String[] strArr = {"cat","Dog","lion","tiger"};
Arrays.sort(strArr);
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 c1.compareTo(c2) * -1;
}
return -1;
}
}
[출력 값]
strArr=[Dog, cat, lion, tiger]
strArr=[cat, Dog, lion, tiger]
strArr=[tiger, lion, cat, Dog]
'Java > 객체지향' 카테고리의 다른 글
[객체지향][자바의 정석] - 21. TreeSet (0) | 2022.02.03 |
---|---|
[객체지향][자바의 정석] - 20. HashSet (0) | 2022.01.31 |
[객체지향][자바의 정석] - 18. 배열을 다루기 편리한 메서드(static) 제공 (0) | 2022.01.27 |
[객체지향][자바의 정석] - 17. Iterator, ListIterator, Enumeration (0) | 2022.01.27 |
[객체지향][자바의 정석] - 15. 스택과 큐 (0) | 2022.01.26 |