2012-02-15 2 views
1

私はTObjectDoubleHashMapの問題を見つけました。バージョン2.0.2はhashCodeメソッドより優先されません。ハッシュコードを実装していないハッシュマップを改ざんしました

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

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

バージョン2でhashCodeメソッドがオーバーライドされなかったのはなぜですか?おそらく、hashCode/equalsをオーバーライドする契約は、トロブマップが最初に書かれた後に導入されたでしょうか?それとも、それは単に契約の違反ですか、後で修正されたバグですか?それはバグではなく機能だ場合、ほとんどそれは多分hashCode/equalsを上書きするための契約をした後に導入されたequals

答えて

1

を持っている場合hashCodeを上書きしないハッシングを扱うクラスをどのように来るので、私は、非常に驚​​かれることと思います元気マップは元々書かれていた?

いいえ、それは戻って存在していました。私は少なくとも1.1の早い段階で信じていますが、1.3文書より早く見つかったものはありません。

または単に契約違反ですか、バグですか?

はい。それは契約の違反です。 java.util.Mapにはjava.lang.Object以上の独自の余分な等価/ハッシュコード契約がありますが、それは故意にIdentityHashMapやその他のいくつかの違反があります。 javadocから

public boolean equals(Object o) 

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

関連する問題