1

我有一个Java数组。数组的每个条目都是一对数字(x 和 y 坐标)。

从技术上讲,我的数组的一个例子是:

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

如何搜索该列表并检查 (3,4) 是否属于该集合?

理想情况下,我想做一个 Java 函数 isCoordinateInSet((3,4), setOfPoints)。我还想避免使用可能会增加操作时间的 for 循环。我正在考虑使用 Java Maps fpr 这个任务。你怎么看?

我没有遵循上面的 Java 语法,但我是这样描述的,以便更好地解释我想要做什么。

我会很感激你的意见。

谢谢你。

4

3 回答 3

3

您可以创建一个包含 (x,y) 对的类 Coordinate 并覆盖其 equals/hashcode 方法以使具有相同 x 和 y 的两个实例相等。

然后在数组中为每对创建一个 Coordinate 实例,并将它们添加到 aSet<Coordinate>中,例如 a 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 公共库有一个名为的类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);

list将包含 5,4 和 8。找到x 坐标值后,您将在此列表中搜索y 坐标。

于 2012-11-17T21:01:11.820 回答