[Java] Comparable, Comparator

개발자·2021년 9월 13일
0

Java

목록 보기
3/8
post-thumbnail
post-custom-banner

Comparable

  • 정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓는 인터페이스
  • 패키지: java.lang.Comparable -> import 해 줄 필요 없다.
  • 자기자신과 매개변수 객체를 비교하는 compareTo 메소드를 재정의 해줘야 한다.
  • 자바에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며, 정렬시에 Comparable의 구현 내용에 맞춰 정렬이 수행된다.
import java.util.*;
class Solution {
    List<Stage> st = new ArrayList<>();
    Collections.sort(st, Collections.reverseOrder());

    class Stage implements Comparable<Stage> {
        public int idx;
        public double fail;

        public Stage(int idx, double fail) {
            this.idx = idx;
            this.fail = fail;
        }

        @Override
        public int compareTo(Stage o) {
            if(fail < o.fail) return -1;
            if(fail > o.fail) return 1;
            return 0;
        }
    }
}


Comparator

  • 정의: 정렬 가능한 클래스(=Comparable이 구현된 클래스)들의 기본 정렬 기준과는 다른 방식으로 정렬하고 싶을 때 사용하는 클래스이다.
  • 두 매개변수 객체를 비교한다.
  • 패키지: java.util.Comparator
  • 주로 익명클래스(new Comparator(){ ... })로 사용되며, 기본적으로 오름차순이 정렬 기준인 것을 내림차순으로 정렬하는 등의 용도로 사용된다.
import java.util.*;
class Solution {
    List<Stage> st = new ArrayList<>();
    Collections.sort(st, new Comparator<Stage>() {
    	@Override
        public int compare(Stage s1, Stage s2) {
            if (s1.fail > s2.fail) return -1;
            else if (s1.fail < s2.fail) return 1;
            return 0;
        }
    });

    class Stage implements Comparator<Stage> {
        public int idx;
        public double fail;

        public Stage(int idx, double fail) {
            this.idx = idx;
            this.fail = fail;
        }

        @Override
        public int compare(Stage s1, Stage s2) {
            if(s1.fail > s2.fail) return 1;
            if(s1.fail < s2.fail) return -1;
            return 0;
        }
    }
}

Ref. https://m.blog.naver.com/occidere/220918234464

profile
log.info("공부 기록 블로9")
post-custom-banner

0개의 댓글