2011-02-28 2 views
4

방금 ​​다음과 같은 진술을 발견했습니다. "가장 많이 차이가 나는 항목을 먼저 비교하여 compareTo의 성능을 크게 향상시킬 수 있습니다." 사실입니까? 그리고 만약 그렇다면 왜?compareTo에는 사전 실행 지연의 일종이 있습니까?

+0

http://www.javapractices.com/topic/TopicAction.do?Id=10에서 구할 수 있습니까? –

+0

어디서 찾았습니까? 제 생각에 그것은 분류에 대한 토론의 맥락에서였습니다. – unholysampler

+0

글쎄, 그래, 알아, 그저 내가 그런 일에 대해 언급하지 않았다는 사실을 알고 싶다. – dhblah

답변

5

몇 가지 속성을 가진 클래스를 생각해보십시오. 인스턴스를 비교하기 위해 일부 속성을 비교해야합니다. 하나를 제외한 모든 속성이 동일하면 필요한 비교의 양은 속성 비교의 순서에 따라 다릅니다. 먼저 다른 속성을 비교하는 경우 한 번의 비교로 결과를 얻습니다. 그러나 다른 속성을 마지막으로 비교하는 경우 동일한 결과를 얻으려면 n 개의 비교를 수행해야합니다.

@Kdeveloper에서 언급했듯이 성능 차이는 일괄 적으로 유사한 비교를 많이하지 않는 한 눈에 띄지 않을 수 있습니다. 하지만 다른 이점은 IMHO 논리적 순서입니다. 이렇게하면 클래스 속성 간의 논리적 관계에 대해 생각할 수 있습니다. 전반적으로 이는 무중단 최적화 (즉, 코드를 읽고 유지 관리하기가 더 어렵지는 않음)이므로 대부분의 시간을 투자 할 가치가 있다고 생각합니다.

+0

+1 좋은 친구. 이 측면을 고려하지 마십시오. –

+0

글쎄, 나는 그 문구가 비교할 대상이 아니라 그 속성에 관한 것일 수도 있다고 생각한다. 처음에는 객체 비교의 순서가 중요하다고 생각했지만, 그것이 당신이 말하는 것이라면 그것은 의미가 있습니다. – dhblah

0

사실입니까? 그리고 만약 그렇다면 왜?

글자 그대로 말해서, 아니요. compareTo 메서드는 기록에 관계없이 실행하는 데 시간이 오래 걸립니다.

특정 구현에서 전반적인 성능을 얻을 수 있다면? 확실합니다. 그러나 귀하의 질문에 대답 할 수 있으려면 상황에 대한 더 많은 맥락이 필요합니다. 먼저 가장 선택적 비교를 넣어 경우, 당신은 평균적으로 각각의 비교를 위해 적은 코드를 실행하기 때문에

+0

하나의 속성에 대해서만 비교하면 참입니다. Péter Török의 대답을보십시오. –

1

예, 그것은

사실이다. 그러나 이러한 테스트가 일반적으로 매우 빠르기 때문에 많은 개체를 비교할 경우 속도 향상이 눈에 띄게됩니다 (예 : 큰 컬렉션을 정렬 할 때).

+0

* 그러나 이러한 테스트는 일반적으로 매우 빠릅니다. * 다른 속성/필드에서 compareTo를 호출해야하는 경우 속도가 빠릅니다. 복수의 (> 2) 호출 타겟을 가지는 인터페이스 인 경우. – bestsss

+0

그래도 일반적으로 컬렉션을 정렬하는 경우와 같이 자주 할 때만 눈에.니다. – Kdeveloper

관련 문제