Vienna

Chapter 11) 컬렉션 프레임워크 - Comparator, Comparable 본문

언어/Java의 정석

Chapter 11) 컬렉션 프레임워크 - Comparator, Comparable

아는개발자 2023. 5. 5. 17:55

◇ Comparator와 Comparable

public interface Comparator{
	int compare(Object o1, Object o2);
    boolean equals(Object obj);
}

public interface Comparable{
	int compareTo(Object o);
}

 

* Comparator: 기본 정렬 기준을 구현하는데 사용.

* Comparable: 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용.

 

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

public class Main {

    public static void main(String[] args) {
        String[] strArr = {"cat","Dog","lion","tiger"};
        
        Arrays.sort(strArr);
        System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr));

        Arrays.sort(strArr, new Descending());
        System.out.println("Arrays.toString(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 c2.compareTo(c1);
        }

        return -1;
    }
}

실행 결과

 

◇ String 비교 Comparator

String에는 대소문자를 구분하지 않고 비교하는 Comparator가 존재.

Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER);
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        String[] strArr = {"cat","Dog","lion","tiger"};
        
        Arrays.sort(strArr);
        System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr));

        Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER);
        System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr));
    }
}

실행 결과

Comments