둘 다 구현하는 클래스를 보았습니다.유사한과비교 측정기. 이것은 무엇을 의미 하는가? 나는 왜 다른 것을 사용합니까?
아래의 텍스트는Comparator 대 Comparable
유사한
비교 가능한 객체는 자신을 다른 객체와 비교할 수 있습니다. 클래스 자체는java.lang.Comparable
인터페이스를 사용하여 인스턴스를 비교할 수 있습니다.
비교 측정기
Comparator 객체는 두 개의 다른 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하지 않고 다른 클래스의 인스턴스를 비교합니다. 이 비교 클래스는java.util.Comparator
인터페이스.
구현 중Comparable
"나는 나 자신을 다른 물건과 비교할 수있다"는 뜻입니다. 일반적으로 단일 기본 자연 비교가있을 때 유용합니다.
구현 중Comparator
"다른 두 개체를 비교할 수 있습니다."라는 의미입니다. 일반적으로 유형의 두 인스턴스를 비교하는 여러 가지 방법이있는 경우에 유용합니다 (예 : 나이, 이름 등으로 사람들을 비교할 수 있습니다.
Person
도구Comparable
왜냐하면 당신은 다음을 변경할 수 없기 때문에방법두 사람이 비교됩니다. - Jon SkeetPerson
. 2) 비교기.PersonAgeComparator
두 개의 서로 다른 엔티티를 비교하고 그 특정 정렬 순서에서 어느 것이 먼저 오는지 결정할 수 있습니다. 3) 엔티티 및 비교 자의 콜렉션을 취하고 순서를 결정하기 위해 비교자를 사용하여 해당 콜렉션을 정렬하는 정렬 코드. - Jon Skeet
Comparable을 사용하면 클래스가 자체 비교를 구현할 수 있습니다.
이와 비교하여 Comparator는 외부 비교입니다.
두 가지 구현 모두에서당신이 비교하고 싶은 것을 선택하십시오.. generics를 사용하면 선언 할 수 있고 컴파일 타임에 검사 할 수 있습니다. 이렇게하면 안전성이 향상되지만 적절한 값을 결정하는 것도 어려움입니다.
지침으로, 나는 일반적으로 그 객체가 비교 될 수있는 가장 일반적인 클래스 또는 인터페이스를 사용한다. 모든 사용 사례에서 내가 상상 한 ... 매우 정확한 정의는 아니다! :-(
Comparable<Object>
컴파일 타임에 모든 코드에서 사용할 수 있습니다 (필요하다면 좋음, 그렇지 않으면 컴파일 타임 오류가 느슨합니다). 당신의 구현은 객체에 대처해야하고 필요에 따라 강력한 방식으로 캐스트해야합니다.Comparable<Itself>
반대로 매우 엄격합니다.재밌 네요, 하위 클래스를 하위 클래스로 만들 때, 하위 클래스도 Comparable이어야하고 그것에 대해 강해야합니다 (또는 Liskov Principle을 깨뜨리고 런타임 오류를 줄 수 있어야합니다).
java.lang.Comparable
구현Comparable
인터페이스, 클래스는 단일 메소드를 구현해야합니다.compareTo()
int a.compareTo(b)
인스턴스를 정렬하려는 클래스를 수정해야합니다. 클래스 당 하나의 정렬 순서 만 만들 수 있습니다.
java.util.Comparator
Comparator 인터페이스를 구현하려면 클래스가 단일 메소드를 구현해야합니다.compare()
int compare (a,b)
Comparable
예를 들어 데이터 객체가 자연 순서가있는 경우와 같이 데이터 객체에 대한 기본 순서를 제공하기위한 것입니다.
에이Comparator
특정 용도로 주문 자체를 나타냅니다.
Comparable
보통 선호된다. 그러나 때로는 이미 구현 된 클래스가 있습니다.Comparable
,하지만 당신은 다른 속성을 정렬하고 싶습니다. 그럼 당신은 강제로Comparator
.
일부 수업은 실제로 제공합니다.Comparators
일반적인 경우들; 예를 들어,String
s는 기본적으로 정렬 할 때 대 / 소문자를 구분하지만 정적Comparator
전화 한CASE_INSENSITIVE_ORDER
.
Comparator와 Comparable 사이의 차이점은 다음과 같습니다.
이 두 가지의 논리적 차이점을 알게되면 Java의 Comparator는 제공된 두 객체를 비교하며 Comparable 인터페이스는 "this"참조를 지정된 객체와 비교합니다.
Java에서의 Comparable은 객체의 자연 순서를 구현하는 데 사용됩니다. Java API String에서 Date 및 래퍼 클래스는 Comparable 인터페이스를 구현합니다.
어떤 클래스가 Java에서 Comparable 인터페이스를 구현하면 List 또는 Array 객체의 컬렉션을 Collections.sort () 또는 Array.sort () 메서드를 사용하여 자동으로 정렬 할 수 있으며 CompareTo 메서드로 정의 된 자연 순서에 따라 객체가 정렬됩니다.
Comparable를 Java로 구현하고있는 객체는, Comparator를 지정하지 않아, 소트 된 맵의 키 또는 TreeSet 등의 소트 세트의 요소로서 사용할 수 있습니다.
사이트 : Java에서 Comparator와 Comparable을 사용하는 방법? 예를 들어
Comparable
자연 순서가있는 객체 용입니다. 객체 자체는 그것이 어떻게 주문되는지를 안다.
Comparator
자연 순서가없는 객체 또는 다른 순서를 사용하려는 객체에 사용됩니다.
Comparator와 Comparable 인터페이스 간의 차이점
Comparable
다른 개체와 함께 사용하여 자체를 비교하는 데 사용됩니다.
Comparator
두 데이터 유형을 비교하는 데 사용됩니다. 객체입니다.
당신이 볼 경우이 둘 사이의 논리적 인 차이는Comparator
Java에서 제공되는 두 객체를 비교하고,Comparable
인터페이스는 "this"참조를 지정된 객체와 비교합니다.
Comparable
Java에서 객체의 자연 순서를 구현하는 데 사용됩니다. Java API String에서 Date 및 래퍼 클래스가 구현됩니다.Comparable
인터페이스.
클래스가 구현되고있는 경우Comparable
Java에서 인터페이스 다음 해당 개체의 컬렉션 중 하나List
또는Array
를 사용하여 자동으로 정렬 할 수 있습니다.Collections.sort()
또는Array.sort()
메소드와 객체는 다음에 정의 된 자연 순서에 따라 정렬됩니다.compareTo
방법.
구현하는 객체Comparable
Java에서 정렬 된 맵의 키 또는 정렬 된 세트의 요소로 사용할 수 있습니다TreeSet
, 아무 것도 지정하지 않고Comparator
.
Comparable 및 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);
}
}
더 많은 예제를 보려면 링크를 클릭하십시오.compamatic