我有一个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语法,但我将其描述为如此,以便更好地解释我想要做什么。
我很感激您的意见。
谢谢。
答案 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>