이펙티브 자바 14

참치돌고래·2021년 10월 31일
0

이펙티브 자바

목록 보기
12/21

Comparable

ComapareTo

compareTo 단순 동치성 비교 + 순서 비교 + 제너릭

//Comparable을 구현한 객체들의 배열은 다음처럼 손쉽게 정렬할 수 있다.

Arrays.sort(a);
public class WordList
{
	putlic static void main(String[] args)
    {
		Set<String> s = new TreeSet<>();
        Collections.addAll(s, args);
        System.out.println(s);
}

알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자.
타입이 다른 객체가 주어지면 ClassCastException을 던지면 된다.

  • 정렬된 컬렉션 : Treeset, TreeMap

  • 유틸리티 컬렉션 : Collection, Arrays

새로운 값 컴포넌트 추가

    1. 독립된 클래스를 생성하고, 원래 클래스의 인스턴스를 가리키는 필드 생성
    1. 내부 인스턴스를 반환하는 '뷰' 메세지를 제공하자.

compareTo 메서드 구현

기본 타입 필드가 여럿일 때의 비교자

public int compareTo(PhoneNumber pn)
{
	int result = Short.compare(areaCode, pn.areaCode);
    if (result == 0)
    {
    	result = Short.compare(prefix, pn.prefix);
        if (result == 0)
        	result = Short,ciomp(lineNum, pn.lineNum);
    }
    return result;

비교자 생성 메서드를 활용한 비교자 (속도 둔화)

private static final Comparator(PhoneNumber> COMPARATOR = comparingInt(PhoneNumber pn) -> pn.areaCode)
	.thenComparingInt(pn ->prefix)
    .thenComparingInt(pn -> lineNum);
    
public int comapreTo(PhoneNumber pn){
	return COMPARATOR.compare(this, pn);

& 연산자는 쓰지 말아야 한다. 그 대신 박싱된 기본 타입 클래스가 제공하는 정적 compare 메서드나 Comparator 인터페이스가 제공하는 비교자 생성 메서드를 사용

profile
안녕하세요

0개의 댓글