130

가능한 중복 :

compare ()와 compareTo () 사이의 차이점

Java : Comparable과 Comparator를 구현하는 것의 차이점은 무엇입니까?

Comparable과 Comparator의 주요 차이점은 무엇입니까?

어떤 시나리오에서 다른 시나리오보다 선호 되는가?

감사

업데이트 됨 - 좋은 링크 예!

http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html


2 답변


176

수업이 구현 될 때유사한,compareTo클래스의 메소드는 해당 객체의 "자연"순서를 정의합니다. 이 메소드는 (요구되지는 않았지만) 객체에 대한 다른 메소드와 일치하도록 계약 상 의무가 있습니다. 예를 들어, 0은 객체에 대해 항상 반환되어야합니다..equals()비교는 true를 반환합니다.

에이비교 측정기두 객체를 비교하는 방법에 대한 자체 정의이며 자연 순서와 정렬되지 않는 방식으로 객체를 비교하는 데 사용할 수 있습니다.

예를 들어, 문자열은 일반적으로 알파벳순으로 비교됩니다. 그래서"a".compareTo("b")알파벳 비교를 사용합니다. Strings의 길이를 비교하고 싶다면 맞춤형 비교기를 작성해야합니다.

요컨대, 그다지 큰 차이는 없습니다. 그것들은 비슷한 의미의 양쪽 끝이다. 일반적으로 자연 순서에 필적할만한 기능을 구현합니다 (자연 순서 정의가 해석에 열려 있음). 다른 정렬 또는 비교 요구를 위해 비교자를 작성합니다.


  • Comparable는 객체 내부에서 구현되어야합니다. 따라서 객체를 비교하는 구현의 특정 종류에 암시 될 객체에 대해 compareTo 메소드로 생성 된 종속성이 있습니다. 그러나 비교기가 외부화되어 동일한 객체에 대해 여러 유형의 비교기를 가질 수 있습니다. 또한 내 이해를 위해 정정이 필요합니다. - Sridhar
  • 필자가 직면 한 경우 임의의 필드를 조건부로 정렬하고 싶을 수 있는데,이 경우 클래스의 컬렉션을 정렬하기 위해 Comparator를 동적으로 전달할 수 있지만 고유성을 정의하려는 경우 클래스의 다른 속성, 그리고 클래스 내에서 Comparable 구현. 그것들은 상호 배타적이지 않습니다. - markg
  • " ... 구현 도구 &Comparator "를 사용할 수 있습니다. " .. implements Comparable "을 사용할 수 있는데,이 경우 차이점은 무엇입니까? - powder366

121

Comparator제어 할 수없는 유형에 대한 사용자 지정 비교 논리를 제공 할 수있는 방법을 제공합니다.

Comparable구현중인 객체를 비교하는 방법을 지정할 수 있습니다.

클래스를 제어 할 수없는 경우 (또는 제어 할 수있는 객체를 비교하는 여러 가지 방법을 제공하려는 경우) 분명히 다음을 사용하십시오.Comparator.

그렇지 않으면 다음을 사용할 수 있습니다.Comparable.


  • 소스 제어여기 키워드입니다. - Jonas Gröger
  • @ JonasGr ö ger 클래스를 제어하지 못하면 무엇을 의미합니까? - TheLogicGuy
  • @TheLogicGuy 클래스가 종속성 또는 다른 코드에서 가져온 것이거나 변경할 수없는 클래스 인 경우 클래스를 제어 할 수 없습니다. - Jonas Gröger
  • 외부 라이브러리에서 포함하는 클래스에 코드를 추가 할 수 없습니다. Comparable은 클래스 본문 내에 compareTo () 메서드를 추가 할 수 있어야하므로 직접 만드는 클래스에만 적용됩니다. - Webber

연결된 질문


관련된 질문

최근 질문