Closed 102092 closed 4 years ago
compareTo, Comparator를 활용한 코드 예제를 통해 차이점을 알 수 있을까요? 책만 읽으니까 두개의 차이점을 잘 모르겠어요.
@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를 학습하면서 풀었던 알고리즘 문제인데요. 풀어보시면 도움이 될 겁니다.
TreeSet, TreeMap, Collections, Arrays에 대해 간단하게 알아보면 좋을 것 같아요! 뒷부분 유틸리티 클래스는 몇번 사용해본 적있지만, Tree 계열은 좀 생소하네요...
Tree 계열은 데이터 입력의 순서를 보장해주는 Table 자료구조로 기존의 Set, Map에 비해 성능은 보장해주지 않습니다. 언어 Python에서는 ordereddict 라는 딕셔너리 자료구조와 비슷하다고 할 수 있습니다.
TreeSet, TreeMap, Collections, Arrays에 대해 간단하게 알아보면 좋을 것 같아요! 뒷부분 유틸리티 클래스는 몇번 사용해본 적있지만, Tree 계열은 좀 생소하네요...