문제

나는 둘 다 구현하는 수업을 보았다 유사한 그리고 비교기. 이것은 무엇을 의미 하는가? 왜 다른 하나를 사용합니까?

도움이 되었습니까?

해결책

아래 텍스트는 비교기 대 비교

유사한

비슷한 객체는 다른 객체와 스스로를 비교할 수 있습니다. 클래스 자체는 java.lang.Comparable 인스턴스를 비교할 수 있도록 인터페이스.

비교기

비교기 객체는 두 가지 다른 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하는 것이 아니라 다른 클래스의 인스턴스를 비교하고 있습니다. 이 비교기 클래스는이를 구현해야합니다 java.util.Comparator 상호 작용.

다른 팁

구현 Comparable 수단 "다른 대상과 비교할 수 있습니다."이것은 일반적으로 단일 자연 기본 기본 비교가있을 때 유용합니다.

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

비교할 수있는 클래스는 자체 비교를 구현할 수 있습니다.

  • 들어 왔어요 같은 수업 (종종 이점입니다)
  • 있을 수있다 하나의 구현 만 (따라서 두 가지 다른 경우를 원한다면 사용할 수 없습니다)

이에 비해 비교기는 외부 비교입니다.

  • 일반적으로 고유 한 인스턴스에 있습니다 (동일한 클래스 또는 다른 곳에서)
  • 각 구현의 이름을 지정하십시오 당신이 정렬하고 싶은 방식으로
  • 비교기를 제공 할 수 있습니다 당신이 통제하지 않는 수업
  • 구현은입니다 첫 번째 객체가 null이라도 사용할 수 있습니다

두 구현 모두에서도 여전히 가능합니다 비교하고 싶은 것을 선택하십시오. 제네릭을 사용하면 그렇게 선언하고 컴파일 타임에 확인할 수 있습니다. 이것은 안전을 향상 시키지만 적절한 가치를 결정하는 것은 또한 어려운 일입니다.

가이드 라인으로서, 나는 일반적으로 그 객체를 비교할 수있는 가장 일반적인 클래스 또는 인터페이스를 사용합니다. :-(

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

재미있는, 서브 클래스로 서브 클래스를 하위 클래스로 할 때, 서브 클래스는 또한 비교할 수 있고 그것에 대해 강력해야합니다 (또는 Liskov 원칙을 깨고 런타임 오류를 줄 것입니다).

java.lang.comparable

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

    int a.compareTo(b)

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

java.util.comparator

  1. 비교기 인터페이스를 구현하려면 클래스는 단일 방법을 구현해야합니다. compare()

    int compare (a,b)

  2. 인스턴스를 정렬하려는 클래스와 별도의 클래스를 구축합니다. 수업 당 여러 정렬 시퀀스를 만들 수 있습니다.

Comparable 예를 들어 데이터 객체에 자연 순서가있는 경우 데이터 객체에 대한 기본 순서를 제공하는 것입니다.

Comparator 특정 용도로 순서 자체를 나타냅니다.

Comparable 일반적으로 선호됩니다. 그러나 때로는 수업이 이미 구현됩니다 Comparable, 그러나 다른 속성을 정렬하고 싶습니다. 그런 다음 a를 사용해야합니다 Comparator.

일부 수업은 실제로 제공합니다 Comparators 일반적인 경우; 예를 들어, Strings는 정렬 할 때 기본적으로 사례에 민감하지만 정적도 있습니다. Comparator ~라고 불리는 CASE_INSENSITIVE_ORDER.

웹에서 찾은 비교기와 비교할 수있는 차이점은 다음과 같습니다.

  1. 이 두 가지 사이의 논리적 차이가 Java의 비교기는 그에게 제공된 두 객체를 비교하는 반면, 비교 가능한 인터페이스는 "이"참조를 지정된 객체와 비교합니다.

  2. Java에서 비교할 수있는 것은 자연스럽게 객체 순서를 구현하는 데 사용됩니다. Java API 문자열에서 날짜 및 래퍼 클래스는 비슷한 인터페이스를 구현합니다.

  3. 모든 클래스가 Java에서 비슷한 인터페이스를 구현 한 경우 해당 객체의 수집은 Collections.sort () 또는 Array.sort () 메소드를 사용하여 자동으로 정렬 할 수 있으며 비교 메소드에 의해 정의 된 자연 순서를 기반으로 정렬됩니다.

  4. Java에서 비교할 수있는 객체는 비교기를 지정하지 않고 정렬 된 맵의 키 또는 요소로 사용될 수 있습니다.

사이트 : 비교기를 사용하고 Java에서 비교할 수있는 방법은 무엇입니까? 예를 들어

더 읽기 : 비교기를 사용하고 Java에서 비교할 수있는 방법은 무엇입니까? 예를 들어

Comparable 자연 순서가있는 물체를위한 것입니다. 객체 자체는 그것이 어떻게 주문 될 것인지 알고 있습니다.
Comparator 자연 순서가없는 물체 나 다른 순서를 사용하려는 경우입니다.

비교기와 비교 가능한 인터페이스의 차이

Comparable 다른 객체와 함께 사용하여 스스로를 비교하는 데 사용됩니다.

Comparator 두 개의 데이터 유형을 비교하는 데 사용됩니다.

당신이 보이면이 둘 사이의 논리적 차이는 Comparator Java에서는 그에게 제공된 두 개의 물체를 비교하고 Comparable 인터페이스는 "이"참조를 지정된 객체와 비교합니다.

Comparable Java에서는 물체의 자연스러운 순서를 구현하는 데 사용됩니다. Java API 문자열, 날짜 및 래퍼 클래스 구현 Comparable 상호 작용.

클래스가 구현되는 경우 Comparable Java의 인터페이스는 해당 객체를 모으십시오 List 또는 Array 사용하여 자동으로 정렬 할 수 있습니다 Collections.sort() 또는 Array.sort() 메소드와 객체는 정의 된 자연 순서에 따라 정렬됩니다. compareTo 방법.

구현하는 객체 Comparable Java에서는 정렬 된 맵에서 키로 사용할 수 있습니다. 예를 들어 정렬 된 세트의 요소 TreeSet, 아무것도 지정하지 않고 Comparator.

비교 및 비교기를 구현하기위한 주석 lib :

public class Person implements Comparable<Person> {         
    private String firstName;  
    private String lastName;         
    private int age;         
    private char gentle;         

    @Override         
    @CompaProperties({ @CompaProperty(property = "lastName"),              
        @CompaProperty(property = "age",  order = Order.DSC) })           
    public int compareTo(Person person) {                 
        return Compamatic.doComparasion(this, person);         
    }  
} 

더 많은 예를 보려면 링크를 클릭하십시오. 공정성

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top