1

私はトローブの問題に出くわしましたTObjectDoubleHashMaphashCodeバージョン2.0.2はメソッドをオーバーライドしません。

troveの最新バージョン(3.0.0)には、が含まれていhashCodeます。

equalsメソッドは両方のバージョンでオーバーライドされることに注意してください。

hashCodeバージョン2でメソッドがオーバーライドされなかったのはなぜですか?たぶん、オーバーライドhashCode/の契約equalsは、トローブマップが最初に書かれた後に導入されましたか?それとも、単に契約違反であり、後で修正されたバグですか?それがバグであり、機能ではない場合、私は非常に驚かれることでしょう。なぜなら、ハッシュを主に扱うクラスがhashCodeequals

4

1 に答える 1

1

たぶん、オーバーライドhashCode/の契約equalsは、トローブマップが最初に書かれた後に導入されましたか?

いいえ、それはずっと昔のことでした。少なくとも1.1とは思えますが、1.3より前のドキュメントは見つかりません。

それとも単に契約違反とバグですか?

はい。契約違反です。java.util.Mapには、それ以上に独自の追加のequality / hashCodeコントラクトがありjava.lang.Object、これは他のいくつかの人によって故意に違反されていることに注意してくださいIdentityHashMap

javadocから:

public boolean equals(Object o)

指定されたオブジェクトをこのマップと比較して等しいかどうかを確認します。true指定されたオブジェクトもマップであり、2つMapのが同じマッピングを表す場合に返されます。より正式には、2つのマップt1とt2は、の場合に同じマッピングを表しt1.entrySet().equals(t2.entrySet())ます。これにより、equalsメソッドがインターフェイスのさまざまな実装間で適切に機能することが保証されMapます。

于 2012-02-15T12:25:38.070 に答える