如何检查对象是否在坐标上

时间:2017-10-04 20:22:42

标签: java algorithm

我有一个带有x和y坐标的对象。这些对象随机放置在网格上,不重叠,也不一定是整数坐标。我想检查某个位置是否有物体(a,b)。我知道我可以像这样循环遍历所有物体和暴力检查

for (object o : objectList) {
    if (o.x == a && o.y == b) {
        return true;
    }
}

但是如果我有很多对象并经常使用这种检查方法,那么它就不够快。我怎样才能提高效率呢?

3 个答案:

答案 0 :(得分:0)

我假设object是您所做的课程,否则o.x将无效。无论如何,有几种方法可以解决这个问题,但最简单的方法可能是通过二维数组。

x用作一个索引,将y用作另一个索引。类似于:object[][] objsAt = new object[maxX][maxY]。然后,要检查某个坐标处的对象,请执行obj = objsAt[x][y]

你也可以使用更高级的技巧,比如Maps,虽然我猜你如果已经了解了这些技巧,你会想到它们。)

答案 1 :(得分:0)

我假设你有一个代表一个观点的类。我建议你实现Comparable<>接口。然后排序你的积分。然后逐个检查是否有两个相等的点。

答案 2 :(得分:0)

如果您正在使用Java,则可以使用HashSet&lt;&gt;存储您的对象。 但是你需要在你的类上实现自己的equals和hashCode方法。 HashSet的时间复杂度对于add()和contains()只有O(1)。

例如,

\s+(?!Stack:).+