Java/객체지향

[객체지향][자바의 정석] - 19. Comparator과 Comparable

얄루몬 2022. 1. 31. 17:32

📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.


[Comparator과 Comparable]

  • Comparator - 기본 정렬기준을 구현하는데 사용
  • Comparable - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interface Comparator{
	int compare(Object o1, Object o2); // 두 객체를 비교
	boolean equals(Object obj); // 이퀄스를 오버라이딩 하라는 뜻
}

public interface Comparable{
	int compareTo(Object o); //주어진 객체(o)를 자신과 비교 this와 비교
}

 

  • Compare()와 CompareTo()는 두 객체의 비교결과를 반환하도록 작성하고 같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+)
public final class Integer extends Number implements Comparable{
	
	public int compareTo(Integer anotherInteger) {
		int v1 = this.value;
		int v2 = anotherInteger.value;
		//같으면 0, 오른쪽 값이 크면 -1, 작으면 1을 반환
		
		return (v1 < v2 ? -1: (v1==v2? 0 : 1));
	}
}

 

 

 

[실습]

package javajungsuk;

import java.util.*;

public class Java11_7_1 {
	
	public static void main(String[] args) {
		String[] strArr = {"cat","Dog","lion","tiger"};
		
		Arrays.sort(strArr);
		System.out.println("strArr="+Arrays.toString(strArr));
		
		Arrays.sort(strArr,String.CASE_INSENSITIVE_ORDER); // 대소문자 구분X
		System.out.println("strArr="+Arrays.toString(strArr));
		
		Arrays.sort(strArr, new Descending()); //역순 정렬
		System.out.println("strArr="+Arrays.toString(strArr));
	}
}

class Descending implements Comparator{
	public int compare(Object o1, Object o2) {
		if(o1 instanceof Comparable && o2 instanceof Comparable) {
			Comparable c1 = (Comparable)o1;
			Comparable c2 = (Comparable)o2;
			return c1.compareTo(c2) * -1;
		}
		return -1;
	}
}
[출력 값]
strArr=[Dog, cat, lion, tiger]
strArr=[cat, Dog, lion, tiger]
strArr=[tiger, lion, cat, Dog]