我在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 坐标。