Alibaba Java 開発マニュアル——コンパレータ
PHPz
PHPz 2017-05-27 17:40:39
0
3
976

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

逆ではないですか

リーリー

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

PHPz
PHPz

学习是最好的投资!

全員に返信(3)
给我你的怀抱

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

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


リーリー

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

いいねを押す +0
黄舟

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

いいねを押す +0
世界只因有你

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



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

を破壊するという強力な提案です。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート