Javaには、int座標でポイントを表すクラスがあります
public class Point {
int x = -1;
int y = -1;
public Point (int xNew, int yNew) {
x = xNew; y = yNew;
}
public boolean equals (Object o) {
// no need for (o instanceof Point) by design
return x == ((Point)o).x && y == ((Point)o).y;
}
}
クラスのオブジェクトをPoint
aのキーとして、HashMap
およびの要素として使用していますHashSet
。
hashCode
関数の最良の候補は何でしょうか?左の部分がx、右の部分がyになるように、それをdoubleにします。たとえば
、次のようx = 4, y = 12
にすると、hashCode
が返されます4.12
。しかし、実装によって、それは倍になることはできず、intだけです。
これはオプションではありません:
public int hashCode() {
// no need to check for exception parseInt since x and y are valid by design
return Integer.parseInt(Integer.toString(x) + Integer.toString(y));
}
値x
とy
が長すぎる可能性があるため、一緒に変換されません。