3
    package point;

    //an array arr is populated with random x,y points using MyPoint then
    public static void main(String[] args) throws IOException {
    HashMap<MyPoint,Integer> map = new HashMap<MyPoint,Integer>();
    Integer val =0;

    for(int i = 0; i < arr.length ; i++)
    {
        map.put(arr[i],val);
    }
    }


//second file.
package point;
public class MyPoint implements Comparable<MyPoint>{

private int x;
private int y;

public MyPoint(int x1, int y1) {
    x = x1;
    y = y1;
}

public boolean equals(Object p) {
    MyPoint p1;
    try {p1 = (MyPoint) p;}
    catch (ClassCastException ex) {return false;}
    return (x == p1.x) && (y == p1.y);
}

public int hashCode() {
    return ((y * 31) ^ x);
}

ここに私のコードがあります MyPoint は xy ポイントを格納します。このコードを使用して、重複のない一意の x、y ポイントのセットを取得しています。

私の質問は、 MyPoint で xy 値を取得するにはどうすればよいですか? これは、HashMap を使用して一意の X、Y ポイントをフィルタリングする効率的な方法ですか。また、ここに私が作成した HashCode があります。

私が使用できるより良い HashCode はありますか?

4

1 に答える 1

1

簡単な方法は、x と y の getter メソッドを作成することです。

public int getX(){
  return x;
}

public int getY(){
   return y;
}

HashMap については、X 座標から、その X 座標と一意の Y 座標 (HashMap) を持つ MyPoints のリストにマップすることができます。ただし、探しているのが一意性だけである場合は、すべての MyPoint を set/ArrayList に格納し、.equals() メソッドを使用して同様のポイントが既に存在するかどうかを確認できます。それが役立つことを願っています!

于 2012-11-10T00:21:46.917 に答える