찾다

 >  Q&A  >  본문

Alibaba Java 개발 매뉴얼——비교기

위 사진은 "Alibaba Java Development Manual v1.2.0"의 설명입니다. 여기에 평등 상황이 처리되지 않는다고 말하는 반대 예가 있지만 제 생각에는 다음과 같습니다.

으아악

반대 아닌가요

으아악

저는 주로 이렇게 사용합니다. 이 곳의 기술을 설명해 주시겠어요? 이유는 무엇입니까?

PHPzPHPz2739일 전983

모든 응답(3)나는 대답할 것이다

  • 给我你的怀抱

    给我你的怀抱2017-05-27 17:42:39

    더 자세히 이해한 결과 문제의 근본 원인은 JDK7의 정렬 구현이 TimSort로 변경되었다는 것입니다. 자세한 내용은 이 문서를 참조하세요.
    http://blog.2baxb.me/archives...

    처음 답변을 드렸을 땐 작성자님의 질문 의도를 잘 이해하지 못해 조금 성급하게 답변드린 점 사과드립니다.
    이전 답변 내용은 오프라인으로 나누어져 있습니다. 답변 댓글에 이전 답변에 대한 @wanghaa님의 논의가 있어서 그대로 유지됩니다. 문제를 알려주셔서 감사합니다.


    으아아아

    위 코드는 -1을 출력합니다. 비교된 두 값이 동일하면 0을 반환해야 합니다. -1을 반환하는 것은 확실히 잘못된 것이므로 동일한 상황은 별도로 처리해야 합니다.

    회신하다
    0
  • 黄舟

    黄舟2017-05-27 17:42:39

    0과 같을 때 판단해야 함

    회신하다
    0
  • 世界只因有你

    世界只因有你2017-05-27 17:42:39

    @gemoji의 토론 후 마침내 이해했습니다.
    Effective Java에서 말한 것과 마찬가지로 Comparator는 Equals를 구현하는 데 필수가 아닙니다.
    JDK7 이후 버전에서는 TimSort가 정렬에 사용됩니다. . 알고리즘, 결과적으로 비교기는 다음과 동일하게 구현되어야 합니다.



    <<Effective Java Chinese Version>> 사실, 반례는 실제로 전이성
    과 대칭성

    을 파괴하는 강력한 제안입니다.

    회신하다
    0
  • 취소회신하다