Coding/Java

Java Comparator & Comparable

heyoon2j 2020. 9. 22. 17:36

■ Java Comparator & Comparable

 - 객체의 정렬 기준을 제공하는 Interface로, Comparator, Comparable을 이용하여 객체를 정렬할 수 있다.

 


• Comparator Interface

 - 정렬하는 규칙을 정의하는 Interface

 - 정렬 규칙이 여러 군데에 사용된다면 Interface를 구현한 클래스를 구현하지만, 한 번씩만 사용된다면 익명 내부 클래스 또는 람다식을 이용하여 구현한다.

 - 일반적으로 String, Integer 등 Java에서 제공하는 타입에 대해서는 Comparator을 사용한다.

   * Integer, Double : 오름차순 정렬

   * String : 사전 순 정렬

 

 - compare(T o1, T o2) 메서드

   1) 오름차순 정렬

    a. o1이 o2 보다 작은 경우, 음수 값을 return

    b. o1과 o2가 같은 경우, 0을 return

    c. o1이 o2 보다 큰 경우, 양수 값을 return

 

   2) 내림차순 정렬

    => 오름차순과 반대로 return 해주면 된다.

class ComparatorTest implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        return o1.substring(1).compareTo(o2.substring(1));
    }
}

class Test{

    public static void main(String[] args) {
        String[] test = {"Java", "Study", "Yoon", "Church"};
        Arrays.sort(test);
        System.out.println(Arrays.toString(test));

        // 1. Comparator 구현
        Arrays.sort(test, new ComparatorTest());
        System.out.println(Arrays.toString(test));

        // 2. 익명 내부 클래스
        Arrays.sort(test, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.substring(2).compareTo(o2.substring(2));
            }
        });
        System.out.println(Arrays.toString(test));

        // 3. Lambda 구현
        Arrays.sort(test,(o1, o2) -> o1.substring(3).compareTo(o2.substring(3)));
        System.out.println(test);
	}
}

* Collection Sort의 경우, Collection.sort()를 이용하여 Sorting 한다.


• Comparable Interface

 - 구현한 Class에 비교할 수 있는 기능을 추가하는 Interface

 - Java에서 제공하지 않고, 개발자가 구현한 Class에 정렬 기능을 추가할 때 사용한다.

 

 - compareTo(T o)

   1) 오름차순 정렬

    a. this 가 o 보다 작은 경우, 음수 값을 return

    b. this 와 o 가 같은 경우, 0을 return

    c. this 가 o 보다 큰 경우, 양수 값을 return

 

   2) 내림차순 정렬

    => 오름차순과 반대로 return 해주면 된다.

class Test{
    public static void main(String[] args) {
        // Comparable
        class ComparableTest implements Comparable<ComparableTest>{
            String value;

            public ComparableTest(String value) {
                this.value = value;
            }

            @Override
            public int compareTo(ComparableTest o) {
                return value.substring(1).compareTo(o.value.substring(1));
            }

            @Override
            public String toString() {
                return value.toString();
            }
        }

        ComparableTest[] test = {new ComparableTest("Java"), new ComparableTest("Study"), new ComparableTest("Yoon")};
        Arrays.sort(test);
        System.out.println(Arrays.toString(test));
    }
}

 

 

 

'Coding > Java' 카테고리의 다른 글

java.lang 패키지  (0) 2020.09.29
Java Stream API  (0) 2020.09.28
Java Lambda Expression(람다식)  (0) 2020.09.18
Java Inner Class(내부 클래스)  (0) 2020.09.18
Java Handling Exception(예외 처리)  (0) 2020.09.17