2017-03-29 6 views
-6
Collections.sort(intervals, new Comparator<Interval>(){ 
    @Override 
    public int compare(Interval obj0, Interval obj1) { 
     return obj0.start - obj1.start; 
    } 
}); 

왜이 비교 함수를 재정 의하여 Collections.sort 메서드를 사용할 수 있습니까? 감사합니다.오버라이드 컬렉션 정렬

+0

비교 자 은 인터페이스이기 때문에 정렬 기능이이 인터페이스를 구현합니까? – PepperGo

+0

public static void 더 많이 ... sort (List 리스트, Comparator c) – PepperGo

+0

왜 'Comparator'를 제공해야하는지 묻는다면, 'Interval'은 * natural ordering을 가지지 않기 때문입니다 * 또는 다른 순서로 정렬하기를 원하기 때문입니다. * natural ordering *에 대한 설명은 ['Comparable'] (https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html)의 javadoc을 참조하십시오. 다른 말로하면, ['sort()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List -)는 'Comparator'를 취하지 않으므로 클래스가 자연 순서를 가질 것을 요구합니다. 즉, Comparable을 구현해야합니다. – Andreas

답변

0

이 비교 함수를 재정의하면 왜 Collections.sort() 메소드 이 작동합니까?

Collections.sort(list) 예를 들면 Comparable를 구현하는 클래스, 만 작동 클래스 등 Integer, String 지금

처럼, 아래 그림과 같이 당신은 class Apple을 가지고 상상 :

public class Apple { 

    private int weight; 

    private String name; 

    private String countryOfOrigin; 

    //getters and setters 

} 

그래서, 이제 Apple 유형의 개체를 비교한다고 가정하지만 어떻게하는지 Collections.sort()는 것을 알고있다 weight 또는 name 또는 다른 것으로 비교하려고합니다. 그럼, 당신은 Comparator (또는 Comparable)을 정의 할 수 있습니다.

+1

Integer, String 등에서 만 작동합니다. 기본 클래스 types_ - 사실이 아닙니다. 중요한 것은 클래스가 'Comparable'을 구현하는지 여부입니다. – Marvin

+0

나는 당신과 동의한다, 나는 이해했다 OP 이해를 위해 – developer

+1

어떻게, 나는 더 명확성을 위해 요점을 추가했다 – developer