이미 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);
}
}
실행결과 : 내림차순 된 것을 확인할 수 있다.
'JAVA > Java2021-2' 카테고리의 다른 글
내부클래스 (inner class) 인스턴스 내부, 정적 내부 클래스 (0) | 2021.10.09 |
---|---|
HashMap 클래스 메서드와 구현실습 (0) | 2021.10.09 |
Comparator 구현 (0) | 2021.10.09 |
Comparable 구현 정리 (0) | 2021.10.09 |
TreeSet 클래스, 클래스 Comparable, Comparator (0) | 2021.10.09 |