이 질문은 인터뷰에서 질문되었습니다. 문제는 Strin
g 및 기타 래퍼 클래스가 Comparator
인터페이스 대신 Comparable
을 구현하는 이유입니다. 나는 Comparator
가 근본적으로 맞춤 정렬을 제공한다는 것을 설명하려고 노력했다. Comparable
는 자연적인 정렬 순서를 기본값으로하고있다. 또한 디자인 원칙 관점에서 보면 Comparable
은 단단히 결합되어 있으며 Comparator
은 느슨하게 결합되어 있습니다. 그러나 대신 String
이 Comparable
대신 구현 된 이유를 명확히 할 수 없습니다. 그들은 이를 비교 될 수있는 일이기 때문에String이 Comparable 인터페이스가 아닌 Comparator 인터페이스를 구현하는 이유
답변
문자열은 Comparable
를 구현합니다. 일반적으로 Comparable
을 구현하는 항목은 언급 한 것처럼 자연스러운 순서가있는 경향이 있습니다.
Comparator
은 비교 방법입니다. Comparator를 만들 때, 물건을 비교할 메소드를 정의하고 있습니다. 주어진 유형에 대해 많은 Comparator를 만들어 여러 가지 방법으로 비교할 수 있습니다.
위의 자연 순서에 대해 언급했습니다. 예, compareTo() 메서드를 재정 의하여 쉽게이 순서를 수정할 수 있다고 생각합니다. 이것은 구현마다 다름을 의미합니다. Comparable 또는 Comparator에만 국한된 것은 아닙니다. String은 변경 가능한 클래스이며 항상 자연 순서 정렬을 제공하는 방식으로 구현됩니다. – RoyalTiger
compareTo를 재정 의하여 순서를 수정할 수 있지만 compareTo를 작성하는 특정 방법을 선택해야하므로 Comparable을 구현하는 각 클래스에 대해 하나의 정의 된 순서 만있을 수 있습니다. 그러나 특정 클래스의 객체를 비교하는 여러 Comparator를 만들 수 있습니다. 각 Comparator는 서로 다른 순서를 정의 할 수 있습니다. 더 많은 정보를 얻으려면 다른 비교 대 질문을 확인하십시오. – John
- 1. Comparable and Comparator Interface
- 2. Comparator 인터페이스를 사용한 오류
- 3. 인터페이스가 다른 인터페이스를 구현하는 이유는 무엇입니까?
- 4. 인터페이스가 클래스가 아닌 다른 인터페이스를 상속합니까?
- 5. 인터페이스가 아닌 모의 클래스
- 6. 내 수업에서 Comparable 인터페이스를 구현하는 데 필요한 점은 무엇입니까?
- 7. 우리는 추상 클래스에 인터페이스를 구현하는 이유
- 8. 내부 인터페이스를 구현하는 메서드를 공개해야하는 이유
- 9. collections.sort() 및 Java Collections의 comparable 및 comparator 인터페이스를 사용해야하는 곳은 어디입니까?
- 10. 하나의 인터페이스가 다른 인터페이스를 상속 받아야합니까?
- 11. 인터페이스를 구현하는 클래스와 같음
- 12. Fluent nHibernate - 다른 인터페이스가 아닌 일부 인터페이스를 저장합니다.
- 13. 언제, 왜 우리는 Comparable 인터페이스를 구현해야합니까?
- 14. 는 Comparable 인터페이스를 구현 컴파일 오류를 얻기
- 15. GetItemAtposition이 String이 아닌 객체를 반환합니다.
- 16. 구현할 인터페이스가 아닌 것은 무엇입니까?
- 17. Scheme에서 String이 C로 전달 될 때 String이 아닌 이유는 무엇입니까?
- 18. 일반 인터페이스를 구현하는 클래스 사전
- 19. Java Comparator Related
- 20. Comparable 인터페이스를 구현하면 "UnsupportedOperationException : ListIterator가 집합을 지원하지 않습니다."오류가 발생합니다.
- 21. Multiline lambda comparator
- 22. 인터페이스가 [Serializable]이 아닌 이유는 무엇입니까?
- 23. Comparator/Comparable없이 필드로 객체의 ArrayList를 정렬하는 방법
- 24. 인터페이스가 아닌 추상 클래스를 사용하여 매개 변수화하는 경우가 있습니까?
- 25. 기본 인터페이스가 아닌 인터페이스 가져 오기
- 26. 인터페이스를 구현하는 객체 선언하기
- 27. 인터페이스를 구현하는 T4 템플릿
- 28. 인터페이스를 구현하는 서비스에 바인딩
- 29. 인터페이스를 구현하는 클래스를 테스트하십시오.
- 30. 인터페이스를 구현하는 방법은 무엇입니까?
그 밖의 세미 중복 : "클래스는 Comparable 및/또는 Comparator가되어야합니까?"(https://stackoverflow.com/questions/1440134) "["compareTo와 compareTo의 차이점은 무엇입니까?)?] (https://stackoverflow.com/questions/420223) ". 불행히도 이것에 대한 정식 dup-target 질문은 없습니다. –