Comparable 과 Comparator를 모두 구현하는 클래스를 보았습니다 . 이것은 무엇을 의미 하는가? 왜 다른 것을 사용합니까?
답변
아래 텍스트는 Comparator와 Comparable의 내용입니다.
유사한
비교 가능한 객체는 다른 객체와 자신을 비교할 수 있습니다. 인스턴스 자체 java.lang.Comparable
를 비교 하려면 클래스 자체가 인터페이스를 구현해야합니다 .
비교기
비교기 객체는 서로 다른 두 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하지 않고 다른 클래스의 인스턴스를 비교합니다. 이 비교기 클래스는 java.util.Comparator
인터페이스 를 구현해야합니다 .
답변
구현 Comparable
은 ” 다른 객체와 자신을 비교할 수 있습니다 “를 의미 합니다. 이는 일반적으로 단일 기본 비교가있을 때 유용합니다.
구현 Comparator
은 ” 다른 두 객체를 비교할 수 있습니다 “를 의미 합니다. 이는 일반적으로 유형의 두 인스턴스를 비교하는 여러 방법이있을 때 유용 합니다. 예를 들어 연령, 이름 등으로 사람을 비교할 수 있습니다.
답변
Comparable을 사용하면 클래스가 자체 비교를 구현할 수 있습니다.
- 그것은 같은 클래스에 있습니다 (종종 장점입니다)
- 하나의 구현 만 있을 수 있습니다 (따라서 두 개의 다른 경우를 원하면 사용할 수 없습니다)
비교하자면, Comparator는 외부 비교입니다.
- 일반적으로 고유 한 인스턴스에 있습니다 (동일한 클래스 또는 다른 위치에 있음)
- 당신 은 당신이 물건을 정렬하려는 방식으로 각 구현의 이름 을 지정합니다
- 통제하지 않는 수업에 대해 비교기를 제공 할 수 있습니다.
- 첫 번째 객체가 null 인 경우에도 구현을 사용할 수 있습니다
두 가지 구현 모두에서 비교할 대상을 계속 선택할 수 있습니다 . 제네릭을 사용하면 선언 할 수 있으며 컴파일 타임에 확인할 수 있습니다. 이것은 안전성을 향상 시키지만 적절한 가치를 결정하는 것은 어려운 일입니다.
지침으로, 나는 일반적으로 그 객체를 비교할 수있는 가장 일반적인 클래스 또는 인터페이스를 사용합니다. 🙁
Comparable<Object>
컴파일 타임에 모든 코드에서 사용할 수 있습니다 (필요한 경우 좋거나 그렇지 않은 경우 나쁘고 컴파일 타임 오류를 잃습니다). 구현은 객체에 대처하고 필요에 따라 강력한 방식으로 캐스팅해야합니다.Comparable<Itself>
반대로 매우 엄격합니다.
재밌게도 서브 클래스에서 서브 클래스로 서브 클래스 할 때 서브 클래스는 또한 비교 가능하고 견고해야합니다.
답변
java.lang.Comparable
-
Comparable
인터페이스 를 구현하려면 클래스가 단일 메소드를 구현해야합니다compareTo()
int a.compareTo(b)
-
인스턴스를 정렬하려는 클래스를 수정해야합니다. 따라서 클래스 당 하나의 정렬 순서 만 만들 수 있습니다.
java.util.Comparator
-
Comparator 인터페이스를 구현하려면 클래스가 단일 메소드를 구현해야합니다
compare()
int compare (a,b)
- 인스턴스를 정렬하려는 클래스와 별도로 클래스를 작성합니다. 클래스별로 여러 정렬 순서를 만들 수 있습니다.
답변
Comparable
데이터 개체의 기본 순서를 제공하기위한 것입니다 (예 : 데이터 개체의 자연스러운 순서).
A Comparator
는 특정 용도에 대한 주문 자체를 나타냅니다.
답변
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을 사용하는 방법은 무엇입니까? 예를 들어