본문 바로가기

JAVA/Java2021-2

Comparator는 언제 쓰는가?

이미 Comparable 이 구현되어있는것을 바꾸고 싶을 때 사용한다.

상황 예시) String의 경우 기본적으로 오름차순의 Comparable이 구현되어 있는데 이 경우 implements<String>한 클래스를 만들어서

compare()함수를 재정의 할 때, 

두 매개변수를 compareTo로 거꾸로 나온 값을 바꿔줄 수 있다. (오름차순의 경우 내림차순으로 바꿔줄 수 있고)

정의한 클래스를 Set정의 할 때 매개변수로 넣어 준다.

 

직접 실습)

package Basic_Grammar.chap4.ch05DataStructureFramework;

import java.util.TreeSet;

public class MemberTreeSetTest2 {
    public static void main(String[] args) {
        TreeSet<String> set=new TreeSet<>();
        set.add("Park");
        set.add("Kim");
        set.add("Lee");
        set.add("Kang");

//        TreeSet은 String, Integer에 대해 기본 오름차순 정렬에 대한 Comparable implements하여 compareTo 정의 되어있다.
        System.out.println(set);
    }
}

위의 결과 (기본 Comparable 오름차순 구현되어있다)

 

내림차순으로 구현하기 위하여 (Comparator 구현)

Step1. String에 대한 Comparable을 변경시킬 implements Comparator<String> 클래스 하나 생성

ex) MyCompare 클래스 하나 생성 한 후 implements Comparator<String>

 

Step2. compare(String s1, String s2) 함수 재정의

package Basic_Grammar.chap4.ch05DataStructureFramework;

import java.util.Comparator;

public class MyCompare implements Comparator<String> {

    @Override
    public int compare(String s1, String s2) {
        return (s1.compareTo(s2))*(-1);
    }
}

 

Step3. Test 클래스에서 클래스를 생성하여 매개변수로 넣어준다.

package Basic_Grammar.chap4.ch05DataStructureFramework;

import java.util.TreeSet;

public class MemberTreeSetTest2 {
    public static void main(String[] args) {
        TreeSet<String> set=new TreeSet<>(new MyCompare());
        set.add("Park");
        set.add("Kim");
        set.add("Lee");
        set.add("Kang");

//        TreeSet은 String, Integer에 대해 기본 오름차순 정렬에 대한 Comparable implements하여 compareTo 정의 되어있다.
        System.out.println(set);

    }
}

실행결과 : 내림차순 된 것을 확인할 수 있다.