上の図は「Alibaba Java Development Manual v1.2.0」の記述です。以下は平等状況が処理されていないという反例ですが、私は次のように考えています。 リーリー
リーリー
学习是最好的投资!
さらに理解すると、問題の根本原因は、JDK7 のソート実装が TimSort に変更されたことです。詳細については、この記事を参照してください。 http://blog.2baxb.me/archives...
最初に回答させていただいた際、質問者の意図がよく理解できず、少し急ぎ回答してしまいましたことをお詫び申し上げます。 以前の回答の内容はオフラインで分割されています。回答コメントで古い回答についての議論があるため、問題を認識させてくれた @wanghaa に感謝します。
上記のコードは -1 を出力します。比較された 2 つの値が等しい場合、0 を返すのは間違いであるため、等しい状況は個別に処理する必要があります。
0に等しい場合に判定します
@gemoji の議論を経て、ようやく理解できました: JDK7 より前のバージョンでは、Effective Java で述べられているように、Comparator はイコールの実装に必須ではありません JDK7 以降のバージョンでは、TimSort がソートに使用されます。 . アルゴリズム。結果として、Comparator は次と等しいものを実装する必要があります。
<<Effective Java Chinese Version>> 実際、これは、推移性 と等価性と比較の対称性
さらに理解すると、問題の根本原因は、JDK7 のソート実装が TimSort に変更されたことです。詳細については、この記事を参照してください。
http://blog.2baxb.me/archives...
最初に回答させていただいた際、質問者の意図がよく理解できず、少し急ぎ回答してしまいましたことをお詫び申し上げます。
以前の回答の内容はオフラインで分割されています。回答コメントで古い回答についての議論があるため、問題を認識させてくれた @wanghaa に感謝します。
リーリー
上記のコードは -1 を出力します。比較された 2 つの値が等しい場合、0 を返すのは間違いであるため、等しい状況は個別に処理する必要があります。
0に等しい場合に判定します
@gemoji の議論を経て、ようやく理解できました:
JDK7 より前のバージョンでは、Effective Java で述べられているように、Comparator はイコールの実装に必須ではありません
JDK7 以降のバージョンでは、TimSort がソートに使用されます。 . アルゴリズム。結果として、Comparator は次と等しいものを実装する必要があります。
<<Effective Java Chinese Version>> 実際、これは、推移性
を破壊するという強力な提案です。と等価性と比較の対称性