Comparable 과 Comparator를 모두 구현하는 클래스를 보았습니다 . 이것은 무엇을 의미 하는가? 왜 다른 것을 사용합니까?
Comparable 과 Comparator를 모두 구현하는 클래스를 보았습니다 . 이것은 무엇을 의미 하는가? 왜 다른 것을 사용합니까?
답변:
아래 텍스트는 Comparator와 Comparable의 내용입니다.
유사한
비교 가능한 객체는 다른 객체와 자신을 비교할 수 있습니다. 인스턴스 자체 java.lang.Comparable
를 비교 하려면 클래스 자체가 인터페이스를 구현해야합니다 .
비교기
비교기 객체는 서로 다른 두 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하지 않고 다른 클래스의 인스턴스를 비교합니다. 이 비교기 클래스는 java.util.Comparator
인터페이스 를 구현해야합니다 .
구현 Comparable
은 " 다른 객체와 자신을 비교할 수 있습니다 "를 의미 합니다. 이는 일반적으로 단일 기본 비교가있을 때 유용합니다.
구현 Comparator
은 " 다른 두 객체를 비교할 수 있습니다 "를 의미 합니다. 이는 일반적으로 유형의 두 인스턴스를 비교하는 여러 방법이있을 때 유용 합니다. 예를 들어 연령, 이름 등으로 사람을 비교할 수 있습니다.
Person
구현 만으로 그렇게 할 수는 없습니다.Comparable
두 사람을 비교 하는 방법 을 변경할 수 없기 때문에 할 수는 없습니다 .
Person
. 2) 비교기, 예 PersonAgeComparator
를 들어 두 개의 다른 엔티티를 비교할 수 있고 특정 정렬 순서에서 가장 먼저 오는 항목을 결정할 수 있습니다. 3) 정렬 코드는 엔티티와 비교기를 수집하고 비교기를 사용하여 해당 수집을 정렬하여 순서를 결정합니다.
Comparable을 사용하면 클래스가 자체 비교를 구현할 수 있습니다.
비교하자면, Comparator는 외부 비교입니다.
두 가지 구현 모두에서 비교할 대상을 계속 선택할 수 있습니다 . 제네릭을 사용하면 선언 할 수 있으며 컴파일 타임에 확인할 수 있습니다. 이것은 안전성을 향상 시키지만 적절한 가치를 결정하는 것은 어려운 일입니다.
지침으로, 나는 일반적으로 그 객체를 비교할 수있는 가장 일반적인 클래스 또는 인터페이스를 사용합니다. :-(
Comparable<Object>
컴파일 타임에 모든 코드에서 사용할 수 있습니다 (필요한 경우 좋거나 그렇지 않은 경우 나쁘고 컴파일 타임 오류를 잃습니다). 구현은 객체에 대처하고 필요에 따라 강력한 방식으로 캐스팅해야합니다.Comparable<Itself>
반대로 매우 엄격합니다.재밌게도 서브 클래스에서 서브 클래스로 서브 클래스 할 때 서브 클래스는 또한 비교 가능하고 견고해야합니다.
java.lang.Comparable
Comparable
인터페이스 를 구현하려면 클래스가 단일 메소드를 구현해야합니다compareTo()
int a.compareTo(b)
인스턴스를 정렬하려는 클래스를 수정해야합니다. 따라서 클래스 당 하나의 정렬 순서 만 만들 수 있습니다.
java.util.Comparator
Comparator 인터페이스를 구현하려면 클래스가 단일 메소드를 구현해야합니다 compare()
int compare (a,b)
Comparable
일반적으로 선호됩니다. 그러나 때로는 클래스가 이미 구현 Comparable
했지만 다른 속성을 정렬하려고합니다. 그런 다음Comparator
.
일부 클래스는 실제로 Comparators
일반적인 경우를 제공 합니다. 예를 들어, String
s는 정렬시 기본적으로 대소 문자를 구분하지만 Comparator
이라는 정적도 있습니다 CASE_INSENSITIVE_ORDER
.
웹에서 찾은 Comparator와 Comparable의 차이점은 다음과 같습니다.
이 두 가지의 논리적 차이점은 Java에서 Comparator가 제공 한 두 개체를 비교하는 반면 Comparable 인터페이스는 "this"참조를 지정된 개체와 비교하는 것입니다.
Java에서 필적하는 것은 객체의 자연스러운 순서를 구현하는 데 사용됩니다. Java API String에서 Date 및 wrapper 클래스는 Comparable 인터페이스를 구현합니다.
Java에서 Comparable 인터페이스를 구현하는 클래스가 있으면 Collections.sort () 또는 Array.sort () 메서드를 사용하여 List 또는 Array 개체의 컬렉션을 자동으로 정렬 할 수 있으며 CompareTo 메서드로 정의 된 자연 순서에 따라 개체가 정렬됩니다.
Java에서 Comparable을 구현하는 객체는 Comparator를 지정하지 않고 정렬 된 맵의 키 또는 정렬 된 세트 (예 : TreeSet)의 요소로 키로 사용할 수 있습니다.
site : Java에서 Comparator 및 Comparable을 사용하는 방법은 무엇입니까? 예를 들어
더 읽기 : Java에서 Comparator 및 Comparable을 사용하는 방법은 무엇입니까? 예를 들어
Comparable
자연스러운 순서를 가진 물체를위한 것입니다. 객체 자체는 주문 방법을 알고 있습니다.
Comparator
자연스러운 순서가 없거나 다른 순서를 사용하려는 경우에 사용됩니다.
비교기와 인터페이스의 차이점
Comparable
다른 객체와 함께 사용하여 자체를 비교하는 데 사용됩니다.
Comparator
두 데이터 유형을 객체로 비교하는 데 사용됩니다.
이 두 가지의 논리적 차이점은 Comparator
Java에서 제공된 두 개체를 Comparable
비교 하는 반면 인터페이스는 "this"참조를 지정된 개체와 비교하는 것입니다.
Comparable
Java에서는 객체의 자연스러운 순서를 구현하는 데 사용됩니다. Java API 문자열에서 Date 및 래퍼 클래스는 Comparable
인터페이스를 구현 합니다.
모든 클래스가 구현하는 경우 Comparable
다음 자바 객체의 집합을 인터페이스 중 하나 List
또는 Array
사용하여 자동으로 정렬 할 수 있습니다 Collections.sort()
또는 Array.sort()
방법 및 개체에 의해 정의가 자연 순서에 따라 정렬됩니다 compareTo
방법.
Comparable
Java 로 구현 된 객체 는 정렬 맵의 키 또는 정렬 된 세트의 요소로 TreeSet
지정할 수 Comparator
있습니다.
Comparable 및 Comparator를 구현하기위한 주석 라이브러리 :
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);
}
}
더 많은 예제를 보려면 링크를 클릭하십시오. 비교하다