2016-08-23 2 views
-2

이 질문은 인터뷰에서 질문되었습니다. 문제는 Strin g 및 기타 래퍼 클래스가 Comparator 인터페이스 대신 Comparable을 구현하는 이유입니다. 나는 Comparator가 근본적으로 맞춤 정렬을 제공한다는 것을 설명하려고 노력했다. Comparable는 자연적인 정렬 순서를 기본값으로하고있다. 또한 디자인 원칙 관점에서 보면 Comparable은 단단히 결합되어 있으며 Comparator은 느슨하게 결합되어 있습니다. 그러나 대신 StringComparable 대신 구현 된 이유를 명확히 할 수 없습니다. 그들은 를 비교 될 수있는 일이기 때문에String이 Comparable 인터페이스가 아닌 Comparator 인터페이스를 구현하는 이유

+0

그 밖의 세미 중복 : "클래스는 Comparable 및/또는 Comparator가되어야합니까?"(https://stackoverflow.com/questions/1440134) "["compareTo와 compareTo의 차이점은 무엇입니까?)?] (https://stackoverflow.com/questions/420223) ". 불행히도 이것에 대한 정식 dup-target 질문은 없습니다. –

답변

3

문자열은 Comparable를 구현합니다. 일반적으로 Comparable을 구현하는 항목은 언급 한 것처럼 자연스러운 순서가있는 경향이 있습니다.

Comparator은 비교 방법입니다. Comparator를 만들 때, 물건을 비교할 메소드를 정의하고 있습니다. 주어진 유형에 대해 많은 Comparator를 만들어 여러 가지 방법으로 비교할 수 있습니다.

+0

위의 자연 순서에 대해 언급했습니다. 예, compareTo() 메서드를 재정 의하여 쉽게이 순서를 수정할 수 있다고 생각합니다. 이것은 구현마다 다름을 의미합니다. Comparable 또는 Comparator에만 국한된 것은 아닙니다. String은 변경 가능한 클래스이며 항상 자연 순서 정렬을 제공하는 방식으로 구현됩니다. – RoyalTiger

+0

compareTo를 재정 의하여 순서를 수정할 수 있지만 compareTo를 작성하는 특정 방법을 선택해야하므로 Comparable을 구현하는 각 클래스에 대해 하나의 정의 된 순서 만있을 수 있습니다. 그러나 특정 클래스의 객체를 비교하는 여러 Comparator를 만들 수 있습니다. 각 Comparator는 서로 다른 순서를 정의 할 수 있습니다. 더 많은 정보를 얻으려면 다른 비교 대 질문을 확인하십시오. – John

관련 문제