我正在尝试确定一种快速存储一组对象的方法,每个对象都有x和y坐标值,以便我可以快速检索某个矩形或圆周内的所有对象。 对于小的对象集(~100),简单地将它们存储在列表中并进行迭代是相对快速的。但是,对于更大的组,这样做会变得非常缓慢。 我还尝试将它们存储在一对TreeMaps中,一个按x坐标排序,另一个按y坐标排序,使用以下代码:
xSubset = objectsByX.subSet( minX, maxX );
ySubset = objectsByY.subSet( minY, maxY );
result.addAll( xSubset );
result.retainAll( ySubset );
这种方法也有效,对于更大的对象集合速度更快,但仍比我想要的慢。 问题的部分原因是这些对象会移动,需要重新插入到这个存储中,这意味着将它们从树/列表中删除并重新添加。 我不禁想到一定有更好的解决方案。 如果有什么区别的话,我是在Java中实现这个,尽管我期望任何解决方案都更像是一个有用的模式/算法。