1

Javaに配列があります。配列の各エントリは、数値のペア(x​​座標とy座標)です。

技術的には、私の配列の例は次のとおりです。

setOfPoints = {(1,2)、(3,4)、(5,6)、(1,9)、(7,4)}

そのリストを検索して、(3,4)がそのセットの一部であるかどうかを確認するにはどうすればよいですか?

理想的には、Java関数isCoordinateInSet((3,4)、setOfPoints)を実行したいと思います。また、操作時間が長くなる可能性のあるforループの使用は避けたいと思います。このタスクでJavaマップを使用することを考えています。どう思いますか?

私は上記のJava構文に従っていませんが、私がやりたいことをよりよく説明するために、そのように説明しました。

ご意見をいただければ幸いです。

ありがとうございました。

4

3 に答える 3

3

(x、y)ペアを保持するクラスCoordinateを作成し、そのequals / hashcodeメソッドをオーバーライドして、同じxとyを持つ2つのインスタンスを等しくすることができます。

次に、配列内のペアごとに1つのCoordinateインスタンスを作成し、それらを、Set<Coordinate>たとえばに追加しますHashSet

次に、あなたisCoordinateInSetは単にへの呼び出しset.contains(new Coordinate(3,4));です。

于 2012-11-17T20:56:39.117 に答える
3
public class Point{

    private int x,y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Point point = (Point) o;

        if (x != point.x) return false;
        if (y != point.y) return false;

        return true;
    }

    @Override 
    public int hashCode() {
        int result = x;
        result = 31 * result + y;
        return result;
    }
}

    Set<Point> points = new HashSet<>();
    points.add(new Point(3,4));
    points.add(new Point(5,6));
    points.add(new Point(1,2));
    points.add(new Point(3,5));

    System.out.println(points.contains(new Point(3,4)));
    System.out.println(points.contains(new Point(1,2)));
    System.out.println(points.contains(new Point(2,4)));
于 2012-11-17T21:02:24.827 に答える
0

Apache CommonsライブラリにMultiHashMapは、org.apache.commons.collectionsパッケージ内にあるという名前のクラスがあります。MultiHashMapを使用して特定の座標を検索できると思います。

MultiMap mhm = new MultiHashMap();
mhm.put(3,5);
mhm.put(3,4);
mhm.put(5,6);
mhm.put(3,8);
List list = (List) mhm.get(3);

list5、4、および8が含まれます。x座標値を見つけたら、このリストでy座標を検索します。

于 2012-11-17T21:01:11.820 に答える