0

これは、コストに基づいてノードをソートするために作成したコンパレータです。

public class MyCostComparator implements Comparator<Node>{
    public int compare(Node a, Node b){
        if(a.pathCost > b.pathCost)
            return 1;
        else
            return -1;
    }
}

私のマシン(Java 1.7)とUniのサーバー(Java 1.5)では動作が異なることがわかりました。しかし、私がそれを作るとき:

if(a.pathCost >= b.pathCost)、1.5では正常に動作するようですが、1.7では逆に動作します。

また、値が等しいときにゼロを返さないことの欠点は何ですか?

4

2 に答える 2

8

「欠点」とは、、、TreeSetおよびTreeMap基本的にすべての比較ベースのデータ構造がまったく機能しないことです。少しでもありません。特に、TreeSet.contains常にを返しfalse常にnullTreeMap.getを返します。

于 2013-02-15T20:52:18.460 に答える
5

ゼロを返さない場合、オブジェクトはそれ自体と等しくないように見えます。これはの契約に違反し、Comparableそれに依存するコレクションが適切に(またはまったく)機能するのを妨げます。

Java 7は、新しい種類のソートアルゴリズムも導入しており、コントラクトに違反していることを検出するとCollections.sort、をスローします。これは、事実を黙って無視していた以前のバージョンへの変更です。IllegalArgumentExceptionComparable

于 2013-02-15T20:52:35.040 に答える