[Java] Comparator 인터페이스

이병수·2024년 1월 18일
0

Java

목록 보기
24/27
post-thumbnail

Comparator


자바 코딩 테스트 공부를 하면서 자주 어떤 것을 정렬할 때, Comparator나 Comparable을 사용해서 정렬한다.

그럴 때 마다 등장했던 것이 Comparator이다.

사실 그냥 Arrays.sort()나 Collections.sort() 메서드를 사용해서 정렬하면 알아서 정렬하거나 역순으로 정렬하는데

기본 정렬 기준외에 다른 기준으로 정렬을 사용하고자 할 때 Comparator를 사용하고
기본 정렬 기준을 구현하는데 Comparable을 사용한다.


자바 docs 문서에 봐서 직접 확인해본 결과

Comparator 인터페이스 안에

int compare(T o1, T o2)

메서드가 있는데, 해당 o1 과 o2 두 객체를 비교해서 정렬 기준을 구현한다.

이 compare 메서드의 설명을 보면

a negative integer, zero, or a positive integer 
as the first argument is less than, equal to, or greater than the second.

즉, 첫번째 인자값이 작을 경우 -1을 반환, 두 인자값이 같을 경우 0을 반환, 두번째 인자값이 클 경우 1을 반환한다.

그래서 1 (양수) 을 반환하면 두 대상의 순서를 바꾼다.
-1 (음수) 나 0을 반환하게 된다면 두 대상의 순서는 그대로 유지하게 된다.

즉, 두 대상을 비교한 뒤 자리바꿈 -> 이를 통해 정렬이 실행이 된다.


Comparator 인터페이스를 구현 받아와서 어떠한 기준으로 정렬할 클래스를 하나 만들고

class TestCode implements Comparator<T> {
	@Override
    public int compare(<T> o1, <T> o2) {
    	return ..
    }
}

특정 기준으로 Override된 메서드를 내가 정렬하고 싶은 기준으로 정렬하면 된다.

예를 들어서 객체 Student가 있다고 하자

class Student {
	private String name;
    private int grade;
    
    //getter
}

Student 객체의 점수에 따라서 정렬 기준으로 하고 싶다면

public int compare(Student o1, Student o2) {
	return o1.getGrade() - o2.getGrade();
}

이런식으로 Student 객체의 점수에 따라 오름차순 정렬을 할 수도 있다는 것이다.


참고

profile
백엔드 개발자가 되고 싶어요

0개의 댓글