ホームページ  >  に質問  >  本文

Alibaba Java 開発マニュアル——コンパレータ

上の図は「Alibaba Java Development Manual v1.2.0」の記述です。以下は平等状況が処理されていないという反例ですが、私は次のように考えています。 リーリー

逆ではないですか

リーリー

私は普段このように使っていますが、この場所のテクニックを説明してもらえますか?理由は何ですか?

PHPzPHPz2702日前950

全員に返信(3)返信します

  • 给我你的怀抱

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

    さらに理解すると、問題の根本原因は、JDK7 のソート実装が TimSort に変更されたことです。詳細については、この記事を参照してください。
    http://blog.2baxb.me/archives...

    最初に回答させていただいた際、質問者の意図がよく理解できず、少し急ぎ回答してしまいましたことをお詫び申し上げます。
    以前の回答の内容はオフラインで分割されています。回答コメントで古い回答についての議論があるため、問題を認識させてくれた @wanghaa に感謝します。


    リーリー

    上記のコードは -1 を出力します。比較された 2 つの値が等しい場合、0 を返すのは間違いであるため、等しい状況は個別に処理する必要があります。

    返事
    0
  • 黄舟

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

    0に等しい場合に判定します

    返事
    0
  • 世界只因有你

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

    @gemoji の議論を経て、ようやく理解できました:
    JDK7 より前のバージョンでは、Effective Java で述べられているように、Comparator はイコールの実装に必須ではありません
    JDK7 以降のバージョンでは、TimSort がソートに使用されます。 . アルゴリズム。結果として、Comparator は次と等しいものを実装する必要があります。



    <<Effective Java Chinese Version>> 実際、これは、推移性
    と等価性と比較の対称性

    を破壊するという強力な提案です。

    返事
    0
  • キャンセル返事