티스토리 뷰

반응형

 

🤔 Comparator와 Comparable이란?

✔ 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스

 

✅ Comparable : 기본 정렬기준을 구현하는데 사용

✅ Comparator : 기본 정렬 기준 외에 다른 기준으로 정렬할 때 사용

public interface Comparator {
	int compare(Object o1, Object o2); // o1, o2 두 객체 비교
    boolean equals(Object obj); // equals를 오버라이딩하라는 뜻
}

public interface Comparable {
	int compareTo(Object o); // 주어진 객체(o)를 자신과 비교
}

 

 

✔ compare()와 compareTo()는 두 객체의 비교 결과를 반환하도록 작성

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));
    }
    ...
}

 

 

예제를 통해 개념을 학습하자.

import java.util.Arrays;
import java.util.Comparator;

public class Ex11_7 {
    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 c1.compareTo(c2) * -1; // -1 곱해서 기본 정렬방식 역순으로 변경
            // 또는 c2.compareTo(c1)으로 작성가능
        }
        return -1;
    }
}

 

 


잘 몰랐던 내용이라 아직

헷갈리는게 있지만

주말을 통해 반복해 체화시켜야 겠다!

그럼 다음 포스팅에서 다시 만나자. 😊

반응형