Я пытаюсь определить быстрый способ хранения набора объектов, каждый из которых имеет координаты x и y, так что я могу быстро получить все объекты в пределах определенного прямоугольника или круга. Для небольших наборов объектов (~ 100) наивный подход просто хранить их в списке и итерации через него относительно быстро. Однако для гораздо больших групп это, как ожидается, будет медленным. Я попытался сохранить их в паре TreeMaps, один из которых был отсортирован по координате x, а один отсортирован по координате y, используя этот код:
xSubset = objectsByX.subSet( minX, maxX );
ySubset = objectsByY.subSet( minY, maxY );
result.addAll( xSubset );
result.retainAll( ySubset );
Это также работает и быстрее для более крупных наборов объектов, но все еще медленнее, чем хотелось бы. Часть проблемы также заключается в том, что эти объекты перемещаются и должны быть вставлены обратно в это хранилище, что означает их удаление и повторное добавление к деревьям/спискам. Я не могу не думать, что там должны быть лучшие решения. Я реализую это в Java, если это имеет какое-то значение, хотя я ожидаю, что любое решение будет больше в форме полезного шаблона/алгоритма.