java-squid / effective-java

effective java 3e study
105 stars 38 forks source link

[아이템 14] Comparable을 구현할지 고려하라 #14

Closed 102092 closed 4 years ago

102092 commented 4 years ago

p89
... 정렬된 컬렉션인 TreeSet과, TreeMap ... 유틸리티 클래스인 Collections와 Arrays가 있다.

TreeSet, TreeMap, Collections, Arrays에 대해 간단하게 알아보면 좋을 것 같아요! 뒷부분 유틸리티 클래스는 몇번 사용해본 적있지만, Tree 계열은 좀 생소하네요...

102092 commented 4 years ago

compareTo, Comparator를 활용한 코드 예제를 통해 차이점을 알 수 있을까요? 책만 읽으니까 두개의 차이점을 잘 모르겠어요.

wooody92 commented 4 years ago

@102092

compareTo, Comparator를 활용한 코드 예제를 통해 차이점을 알 수 있을까요? 책만 읽으니까 두개의 차이점을 잘 모르겠어요.

Comparator는 인터페이스이고 compareTo는 Comparable 인터페이스의 선언된 메서드입니다. 저는 주로 알고리즘에서 정렬을 커스텀하여 사용할 때 사용하는데요. 아래 간단한 예제를 볼게요.

public void sort() {
  Integer[] numbers = {5, 3, 2, 9, 7};
  Arrays.sort(numbers, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
      return o1.compareTo(o2);
    }
  });
}

// result
[2, 3, 5, 7, 9]

보시는 것처럼 배열에 Comparator의 인터페이스를 새로 구현 클래스로 생성하여 사용했습니다. Comparaor 인터페이스의 compare 메서드를 compareTo 메서드를 활용하여 재정의 하였구요. 아래는 동일한 코드를 람다식으로 보기좋게 변환한 코드입니다.

public void sort() {
  Integer[] numbers = {5, 3, 2, 9, 7};
  Arrays.sort(numbers, (o1, o2) -> o1.compareTo(o2));
}

한결 보기 좋아졌습니다. Comparator는 비교값들은 원하는 중요순위 순서로 정렬할 수 있어 활용도가 높습니다. 아래는 제가 Comparator를 학습하면서 풀었던 알고리즘 문제인데요. 풀어보시면 도움이 될 겁니다.

https://wooody92.github.io/algorithm/Algorithm-Comparator/

guswns1659 commented 4 years ago

Comparable, Comparator의 차이

kses1010 commented 4 years ago

TreeSet, TreeMap, Collections, Arrays에 대해 간단하게 알아보면 좋을 것 같아요! 뒷부분 유틸리티 클래스는 몇번 사용해본 적있지만, Tree 계열은 좀 생소하네요...

Tree 계열은 데이터 입력의 순서를 보장해주는 Table 자료구조로 기존의 Set, Map에 비해 성능은 보장해주지 않습니다. 언어 Python에서는 ordereddict 라는 딕셔너리 자료구조와 비슷하다고 할 수 있습니다.