[Java]-Comparable Comparator 차이

2019년 10월 26일 by Xion

    [Java]-Comparable Comparator 차이 목차

객체 정렬 예시
객체를 사용자가 정의한 정렬 기준에 맞춰 정렬해야 하는 경우
Ex) 좌표를 x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬
Ex) 국어점수는 증가하는 순, 수학점수는 감소하는 순으로 정렬

 

객체의 정렬의 기준 방법 

1.Comparable

정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스

package: java.lang.Comparable
Java에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며, 정렬 시에 이에 맞게 정렬이 수행된다.

 

구현 방법


정렬할 객체에 Comparable interface를 implements 후, compareTo() 메서드를 오버라이드하여 구현한다.
compareTo() 메서드 작성법
현재 객체 < 파라미터로 넘어온 객체    : 음수 리턴
현재 객체 == 파라미터로 넘어온 객체  : 0 리턴
현재 객체 > 파라미터로 넘어온 객체    : 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.


  사용 방법
Arrays.sort(array)
Collections.sort(list)

 

Comparable interface를 이용한 Java 객체를 정렬

// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
class Point implements Comparable<Point> {
    int x, y;

    @Override
    public int compareTo(Point p) {
        if(this.x > p.x) {
            return 1; // x에 대해서는 오름차순
        }
        else if(this.x == p.x) {
            if(this.y < p.y) { // y에 대해서는 내림차순
                return 1;
            }
        }
        return -1;
    }
}

// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);





https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html

 

 

 

Arrays.sort()와 Collections.sort()의 차이


Arrays.sort() (배열 정렬의 경우)
Ex) byte[], char[], double[], int[], Object[], T[] 등 * Object Array에서는 TimSort(Merge Sort + Insertion Sort)를 사용
Object Array: 새로 정의한 클래스에 대한 배열 * Primitive Array에서는 Dual Pivot QuickSort(Quick Sort + Insertion Sort)를 사용
Primitive Array: 기본 자료형에 대한 배열

 


Collections.sort() (List Collection 정렬의 경우)

※이경우 Collections (복수형) 으로 적어야한다


Ex) ArrayList, LinkedList, Vector 등 * 내부적으로 Arrays.sort()를 사용

 

 

2.Comparator

ㆍ정렬 가능한 클래스(Comparable 인터페이스를 구현한 클래스)들의 기본 정렬 기준과 다르게 정렬 하고 싶을 때

 사용하는 인터페이스

package: java.util.Comparator

주로 익명 클래스로 사용된다.
기본적인 정렬 방법인 오름차순 정렬을 내림차순으로 정렬할 때 많이 사용한다.

'Java' 카테고리의 다른 글

[Java]-toString()이란?  (0) 2019.10.27
[Java]-Vector와 ArrayList의 차이  (0) 2019.10.27
[Java]-HashSet이란  (0) 2019.10.26
Java-Map전체 출력 entrySet(),keySet(),Iterator()  (0) 2019.10.26
Java-Map이란? Map의 종류  (0) 2019.10.26