Java にVertex
は、Java3D クラスのサブクラスがありPoint3f
ます。座標の値に基づいてPoint3f
計算するようになりましたが、私のクラスではより厳密にしたいと考えています。2 つの頂点が等しいのは、それらが同じオブジェクトである場合のみです。ここまでは順調ですね:equals()
Vertex
class Vertex extends Point3f {
// ...
public boolean equals(Object other) {
return this == other;
}
}
これが の契約に違反していることはわかってequals()
いますが、頂点を他の頂点と比較するだけなので、これは問題ではありません。
ここで、頂点を に配置できるようにするにHashMap
は、hashCode()
メソッドは と一致する結果を返さなければなりませんequals()
。現在それを行っていますが、おそらく戻り値は のフィールドに基づいているため、同じ座標を持つPoint3f
異なるオブジェクトに対してハッシュ衝突が発生します。Vertex
したがって、のフィールドhashCode()
から計算するのではなく、オブジェクトのアドレスに基づいて を使用したいと思います。クラスがこれを行うことはVertex
知っていますが、メソッドをオーバーライドするため、そのメソッドを呼び出すことはできません。Object
hashCode()
Point3f
だから、実際に私の質問は2つあります:
- 私はそのような浅いものが欲しい
equals()
ですか? - はいの場合、ハッシュコードを計算するためのオブジェクトのアドレスを取得するにはどうすればよいですか?
編集:私は何かを考えました...int
オブジェクトの作成時にランダムな値を生成し、それをハッシュコードに使用できます。それは良い考えですか?なぜだめですか)?