[JAVA] compareTo 정렬 기준 오버라이딩

Hyebin Lee·2022년 4월 26일
0

JAVA

목록 보기
6/6
post-thumbnail

CompareTo

CompareTo (Object o) 메서드는 입력 매개변수로 받는 o의 비교값과 compareTo 메서드를 실행할 객체의 비교값을 비교하여 음수를 리턴하는 경우는 this가 먼저, 양수를 리턴하는 경우는 o가 먼저인 순서로 sort된다

이 메서드의 핵심은 객체의 값을 비교하는 것이다.

활용

  • 비교할 객체 타입의 클래스에 Comparable<해당타입>을 상속한다.
  • @Override compareTo 메서드를 구현한다.
class Student implements Comparable<Student> {
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Student target) {
        return this.age <= target.age ? 1 : - 1; // 나이 내림차순
    }

    @Override
    public String toString() {
        return "이름 : " + name + ", 나이 : " + age;
    }
}

PriorityQueue

우선순위 큐에서 지정한 타입이 만약 사용자가 선언한 클래스 타입이라면 해당 클래스에서 우선순위 큐에 넣을 정렬 기준을 미리 지정해줄 수 있다.

Collections.sort(배열)

기본타입은 내부적으로 compareTo가 구현되어 있어서 Arrays.sort(배열)로 정렬이 가능하지만
사용자가 직접 선언한 타입의 객체는 그렇게 정렬이 불가능하다.
하지만 위의 활용처럼 Comparable을 상속받아 compareTo 메서드를 오버라이드해서 정렬 기준을 미리 알려주면
단순이 Collections.sort(해당타입의 객체들이 들어간 배열)만 해주면 알아서 그 기준에 따라 정렬이 된다.

0개의 댓글