[java] 클래스는 언제 Comparable 및 / 또는 Comparator 여야합니까?

ComparableComparator를 모두 구현하는 클래스를 보았습니다 . 이것은 무엇을 의미 하는가? 왜 다른 것을 사용합니까?



답변

아래 텍스트는 Comparator와 Comparable의 내용입니다.

유사한

비교 가능한 객체는 다른 객체와 자신을 비교할 수 있습니다. 인스턴스 자체 java.lang.Comparable를 비교 하려면 클래스 자체가 인터페이스를 구현해야합니다 .

비교기

비교기 객체는 서로 다른 두 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하지 않고 다른 클래스의 인스턴스를 비교합니다. 이 비교기 클래스는 java.util.Comparator인터페이스 를 구현해야합니다 .


답변

구현 Comparable은 ” 다른 객체와 자신을 비교할 수 있습니다 “를 의미 합니다. 이는 일반적으로 단일 기본 비교가있을 때 유용합니다.

구현 Comparator은 ” 다른 두 객체를 비교할 수 있습니다 “를 의미 합니다. 이는 일반적으로 유형의 두 인스턴스를 비교하는 여러 방법이있을 때 유용 합니다. 예를 들어 연령, 이름 등으로 사람을 비교할 수 있습니다.


답변

Comparable을 사용하면 클래스가 자체 비교를 구현할 수 있습니다.

  • 그것은 같은 클래스에 있습니다 (종종 장점입니다)
  • 하나의 구현 만 있을 수 있습니다 (따라서 두 개의 다른 경우를 원하면 사용할 수 없습니다)

비교하자면, Comparator는 외부 비교입니다.

  • 일반적으로 고유 한 인스턴스에 있습니다 (동일한 클래스 또는 다른 위치에 있음)
  • 당신 은 당신이 물건을 정렬하려는 방식으로 각 구현의 이름지정합니다
  • 통제하지 않는 수업에 대해 비교기를 제공 할 수 있습니다.
  • 첫 번째 객체가 null 인 경우에도 구현을 사용할 수 있습니다

두 가지 구현 모두에서 비교할 대상을 계속 선택할 수 있습니다 . 제네릭을 사용하면 선언 할 수 있으며 컴파일 타임에 확인할 수 있습니다. 이것은 안전성을 향상 시키지만 적절한 가치를 결정하는 것은 어려운 일입니다.

지침으로, 나는 일반적으로 그 객체를 비교할 수있는 가장 일반적인 클래스 또는 인터페이스를 사용합니다. 🙁

  • Comparable<Object>컴파일 타임에 모든 코드에서 사용할 수 있습니다 (필요한 경우 좋거나 그렇지 않은 경우 나쁘고 컴파일 타임 오류를 잃습니다). 구현은 객체에 대처하고 필요에 따라 강력한 방식으로 캐스팅해야합니다.
  • Comparable<Itself> 반대로 매우 엄격합니다.

재밌게도 서브 클래스에서 서브 클래스로 서브 클래스 할 때 서브 클래스는 또한 비교 가능하고 견고해야합니다.


답변

java.lang.Comparable

  1. Comparable인터페이스 를 구현하려면 클래스가 단일 메소드를 구현해야합니다compareTo()

    int a.compareTo(b)

  2. 인스턴스를 정렬하려는 클래스를 수정해야합니다. 따라서 클래스 당 하나의 정렬 순서 만 만들 수 있습니다.

java.util.Comparator

  1. Comparator 인터페이스를 구현하려면 클래스가 단일 메소드를 구현해야합니다 compare()

    int compare (a,b)

  2. 인스턴스를 정렬하려는 클래스와 별도로 클래스를 작성합니다. 클래스별로 여러 정렬 순서를 만들 수 있습니다.

답변

Comparable 데이터 개체의 기본 순서를 제공하기위한 것입니다 (예 : 데이터 개체의 자연스러운 순서).

A Comparator는 특정 용도에 대한 주문 자체를 나타냅니다.


답변

Comparable일반적으로 선호됩니다. 그러나 때로는 클래스가 이미 구현 Comparable했지만 다른 속성을 정렬하려고합니다. 그런 다음Comparator .

일부 클래스는 실제로 Comparators일반적인 경우를 제공 합니다. 예를 들어, Strings는 정렬시 기본적으로 대소 문자를 구분하지만 Comparator이라는 정적도 있습니다 CASE_INSENSITIVE_ORDER.


답변

웹에서 찾은 Comparator와 Comparable의 차이점은 다음과 같습니다.

  1. 이 두 가지의 논리적 차이점은 Java에서 Comparator가 제공 한 두 개체를 비교하는 반면 Comparable 인터페이스는 “this”참조를 지정된 개체와 비교하는 것입니다.

  2. Java에서 필적하는 것은 객체의 자연스러운 순서를 구현하는 데 사용됩니다. Java API String에서 Date 및 wrapper 클래스는 Comparable 인터페이스를 구현합니다.

  3. Java에서 Comparable 인터페이스를 구현하는 클래스가 있으면 Collections.sort () 또는 Array.sort () 메서드를 사용하여 List 또는 Array 개체의 컬렉션을 자동으로 정렬 할 수 있으며 CompareTo 메서드로 정의 된 자연 순서에 따라 개체가 정렬됩니다.

  4. Java에서 Comparable을 구현하는 객체는 Comparator를 지정하지 않고 정렬 된 맵의 키 또는 정렬 된 세트 (예 : TreeSet)의 요소로 키로 사용할 수 있습니다.

site : Java에서 Comparator 및 Comparable을 사용하는 방법은 무엇입니까? 예를 들어

더 읽기 : Java에서 Comparator 및 Comparable을 사용하는 방법은 무엇입니까? 예를 들어