HashMap<Point, T>クラスの他のインスタンスにマップされるいくつかのポイントを保持するデータ構造がありますT。クラスが次のようにインスタンス化されると、このマップにはいくつかのデフォルト値が与えられます。
T t1 = new T();
T t2 = new T();
Point p1 = new Point(0, 1);
Point p2 = new Point(0, 2);
HashMap<Point, T> map = new HashMap<Point, T>();
static {
map.put(p1, t1);
map.put(p2, t2);
}
私のコードでは、xとy値を含むイベントを受け取ります。これらのイベントのいずれかを受け取ると、渡されたandを使用して新しいPointオブジェクトを作成し、次のようにマップから値を取得しようとしています。xy
Point p = new Point(event.getX(), event.getY); // Assume (x, y) = (0, 1) (p1)
if(p.equals(p1)
T t = map.get(p);
この場合は (with (x, y) = (0, 1) とp等しいですが、から値を取得しています。これは、 のメソッドが固有のハッシュを計算する以外の何かを使用しているためだと思います。衝突を防ぐために。p1nullmaphashCode()Point (Point2D)equals
私の質問は、新しいインスタンスを使用して値を取得するにはどうすればよいですか? ユースケースに適合する別のデータ構造はありますか?mapp
または、目的に合わせてクラスとメソッドを拡張するtoString()などの他のマッピングを使用できると思います。これらの方法は「ハッキー」に感じますが、よりクリーンな方法があれば、ぜひ聞きたいです。HashMap<String, T>PointOverridehashCode()