如何在 Java 中搜索坐标数组



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

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

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

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

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

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

感谢您的投入。

谢谢。

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)));

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

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

那么你isCoordinateInSet只是对set.contains(new Coordinate(3,4));的召唤。

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 坐标值后,您将在此列表中搜索 y 坐标

最新更新