我有一个带有x和y坐标的对象。这些对象随机放置在网格上,不重叠,也不一定是整数坐标。我想检查某个位置是否有物体(a,b)。我知道我可以像这样循环遍历所有物体和暴力检查
for (object o : objectList) {
if (o.x == a && o.y == b) {
return true;
}
}
但是如果我有很多对象并经常使用这种检查方法,那么它就不够快。我怎样才能提高效率呢?
答案 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:).+