본문 바로가기
IT지식/알고리즘

[알고리즘] Comparator 와 Comparable 기록용

by five-sun 2022. 12. 12.
728x90

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

 

[Java] Comparable와 Comparator의 차이와 사용법 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

Comparable과 Comparable 모두 인터페이스이다.

그러므로, 사용하고자 한다면 인터페이스 내에 선언된 메소드를 반드시 구현해야한다.

 

Comparable 인터페이스는 compareTo 메소드를 구현해야하고, Comparator 인터페이스를 쓰려면 compare 메소드를 구현해야 한다.

 

역할은 비슷하지만 차이가 있다.

Comparable의 compareTo(T o) 메소드는 파라미터가 한개이고, Comparator의 compare(T o1, T o2) 메소드는 파라미터가 두개이다.

 

Comparable의 경우 자기 자신관 매개변수 객체를 비교하고, Comparator는 두 매개변수 객체를 비교하는 것이다.

비교 대상이 다른 것이다.

 

객체 비교의 결과나 return이 양수일 때, 두 객체의 순서가 바뀐다.

 

Comparable 인터페이스의 경우,

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;
    }
}
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html

 

Comparator의 경우,

// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
class MyComparator implements Comparator<Point> {
  @Override
  public int compare(Point p1, Point p2) {
    if (p1.x > p2.x) {
      return 1; // x에 대해서는 오름차순
    }
    else if (p1.x == p2.x) {
      if (p1.y < p2.y) { // y에 대해서는 내림차순
        return 1;
      }
    }
    return -1;
  }
}
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html

 

Arrays.sort와 함께 사용하는 예시,

Arrays.sort(arr2, new Comparator<Integer>() {
	@Override
	public int compare(Integer i1, Integer i2) {
		return i2 - i1;
	}
});

 

728x90