如何在Java中搜索坐标数组?

时间:2012-11-17 20:53:47

标签: java arrays search coordinates

我有一个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语法,但我将其描述为如此,以便更好地解释我想要做什么。

我很感激您的意见。

谢谢。

3 个答案:

答案 0 :(得分:3)

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

然后,在数组中为每对创建一个Coordinate实例,并将其添加到Set<Coordinate>,例如HashSet

然后,您isCoordinateInSet只是对set.contains(new Coordinate(3,4));的调用。

答案 1 :(得分: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)));

答案 2 :(得分: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);

list将包含5,4和8.找到 x-coordinate 值后,您将在此列表中搜索<​​em> y-coordinate 。< / p>